Множество населенных пунктов - mongoosejs
Просто простой запрос, например, с двойной ссылкой в модели.
Схема/Модель
var OrderSchema = new Schema({
user: {
type : Schema.Types.ObjectId,
ref : 'User',
required: true
},
meal: {
type : Schema.Types.ObjectId,
ref : 'Meal',
required: true
},
});
var OrderModel = db.model('Order', OrderSchema);
Query
OrderModel.find()
.populate('user') // works
.populate('meal') // dont works
.exec(function (err, results) {
// callback
});
Я уже пробовал что-то вроде
.populate('user meal')
.populate(['user', 'meal'])
Фактически работает только одна из населенных пунктов.
Итак, как сделать работу двух населенных пунктов?
Ответы
Ответ 1
Вы уже используете правильный синтаксис:
OrderModel.find()
.populate('user')
.populate('meal')
.exec(function (err, results) {
// callback
});
Возможно, meal
ObjectId из заказа не находится в коллекции Meals
?
Ответ 2
ОБНОВИТЬ:
Это решение остается для версии 3.x Mongoose
http://mongoosejs.com/docs/3.8.x/docs/populate.html
но больше не документируется для> = 4.x версий Mongoose, и поэтому ответ от @JohnnyHK пока является единственным действительным.
ОРИГИНАЛЬНАЯ ПОЧТА
Если вы используете Mongoose> = 3.6, вы можете передать пробелами строку с именами путей для заполнения:
OrderModel.find()
.populate('user meal')
.exec(function (err, results) {
// callback
});
http://mongoosejs.com/docs/populate.html
Ответ 3
Возможно, это уже решено, но это мое мнение о множественном и глубоком населении в Mongodb> 3.6:
OrderModel.find().populate([{
path: 'user',
model: 'User'
}, {
path: 'meal',
model: 'Meal'
}]).exec(function(err, order) {
if(err) throw err;
if(order) {
// execute on order
console.log(order.user.username); // prints user username
console.log(order.meal.value); // you get the idea
}
});
Есть, вероятно, другие способы сделать это, но это делает очень читабельный код для начинающих (как я)
Ответ 4
у меня та же проблема, но моя ошибка не в населении, у меня ошибка в модели
если ты это сделаешь
неисправленный
user: {
type: [Schema.Types.ObjectId],
ref: 'User'
}
правильный
user: [{
type: Schema.Types.ObjectId,
ref: 'User'
}]
Вы должны поместить массив вокруг объекта, как это