Я изо всех сил пытаюсь получить то, что я ожидаю увидеть при запросе массива с использованием Mongoose. Пользователь может иметь много комнат, связанных с его/ее учетной записью. Объекты комнаты хранятся в массиве, прикрепленном к пользователю в коллекции. Существует только одна коллекция, называемая пользователями.Mongoose Mongodb, запрашивающий массив объектов
Рассмотрим следующие две схемы для пользователя и комнаты:
USER SCHEMA
var userSchema = mongoose.Schema({
local : {
username : String,
email : String,
password : String,
rooms : {type:Array, default: []}
}
});
ROOM SCHEMA
var roomSchema = mongoose.Schema({
name: String
});
Это запрос, я попытался:
var User = require('../models/user');
User.find({ 'rooms.name' : req.body.username },
{ rooms:
{ $elemMatch :
{
name: req.body.username
}
}
}, function (err, user) {
if (err){
return done(err);
}
console.log("user:::", user);
if (user) {
console.log("ROOM NAME FOUND");
req.roomNameAlreadyInUse = true;
next();
} else {
req.roomNameAlreadyInUse = false;
console.log("ROOM NAME NOT FOUND");
next();
}
});
Проблема заключается в том, что этот запрос всегда возвращает пустой массив, даже если он должен что-то переписывать или если он ничего не должен возвращать. Итак, как бы я искал все массивы комнат пользователей, чтобы узнать, существует ли название комнаты?
Я также попытался следующие на вопросы, но ни успешны:
User.find({local: {rooms: {$elemMatch: {name: req.body.username}}}}, function (err, user) {
}
User.find({'local.rooms': {$elemMatch: {name: req.body.username}}}, function (err, user) {
}
Я хотел бы также отметить, что база данных заполняется, как я могу видеть массив (который имеет 1 элемент, созданный при создании учетной записи пользователя) в робомонго.
Выборочные данные из консольного вывода для отображения базы данных заселяется (включая user.rooms массив):
db.users.find() { "_id": ObjectId ("533c4db2b2c311a81be8a256"), " local ": {" password ":" $ 2a $ 08 $ 0yQQJ2y0726kZtkWY5mAPOgZhacOmZn0Fd8DlausiuMB XE4ZblTXS "," username ":" paul "," email ":" test "," rooms ": [{" name ":" paul "," id ": ObjectId (" 533c4db2b2c311a81be8a2 57 ")}]," status ":" active "}," _v ": 0} {" _id ": ObjectId (" 533c4ddab2c311a81be8a258 ")," local ": {" password ":" $ 2a $ 08 $ dC3CbDTkG5ozECDTu/IicO3 Az0WdkzlGh2xDcb8j1CF/ FQhe5guZq "," username ":" john "," email ":" test2 "," rooms ": [{" name ":" john "," id ": ObjectId (" 533c4ddab2c311a81be8a 259 ")} ], "статус": "активный"}, " _v": 0}
Каковы фактические данные в вашей коллекции «пользователей» из оболочки монго? Я также вижу некоторые проблемы с вашим определением схемы, и вы не даете понять, находятся ли данные в одной коллекции или два. Вы можете добавить это к своему вопросу. –
Какие проблемы вы видите в моей схеме Нейл Лунн? Все данные находятся в одной коллекции. – Paulie
Другие вопросы были более важными, поэтому это поможет, если вы сможете редактировать. То, что я имел в виду здесь, было то, что «roomSchema», похоже, не используется. На него обычно ссылаются в «userSchema». Но самое главное, что нам нужно увидеть, это некоторые из ваших данных. –