Juste une simple requête, par exemple avec une double référence dans le modèle.
Schéma/Modèle
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);
Requête
OrderModel.find()
.populate('user') // works
.populate('meal') // dont works
.exec(function (err, results) {
// callback
});
J'ai déjà essayé quelque chose comme
.populate('user meal')
.populate(['user', 'meal'])
En fait, un seul des habitants fonctionne.
Alors, comment faire fonctionner deux populations?
Vous utilisez déjà la syntaxe correcte de:
OrderModel.find()
.populate('user')
.populate('meal')
.exec(function (err, results) {
// callback
});
Peut-être que le meal
ObjectId de la commande n'est pas dans la collection Meals
?
MISE À JOUR:
Cette solution reste pour la version 3.x de Mongoose
http://mongoosejs.com/docs/3.8.x/docs/populate.html
mais n'est plus documenté pour les versions> = 4.x de Mongoose et donc la réponse de @JohnnyHK est la seule valable pour le moment.
POSTE ORIGINAL
Si vous utilisez Mongoose> = 3.6, vous pouvez passer une chaîne délimitée par des espaces des noms de chemin à remplir:
OrderModel.find()
.populate('user meal')
.exec(function (err, results) {
// callback
});
Cela a probablement déjà été résolu, mais voici mon opinion sur la population multiple et profonde dans 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's username
console.log(order.meal.value); // you get the idea
}
});
Il existe probablement d'autres façons de le faire, mais cela rend le code très lisible pour les débutants (comme moi)
j'ai le même problème, mais mon erreur n'est pas dans populate, j'ai une erreur dans Model
si tu fais ça
non corrigé
user: {
type: [Schema.Types.ObjectId],
ref: 'User'
}
correct
user: [{
type: Schema.Types.ObjectId,
ref: 'User'
}]
vous devez mettre un tableau autour de l'objet comme celui-ci