Mongoose-en utilisant Populate sur un tableau de ObjectId
J'ai un schéma qui ressemble un peu à:
var conversationSchema = new Schema({
created: { type: Date, default: Date.now },
updated: { type: Date, default: Date.now },
recipients: { type: [Schema.ObjectId], ref: 'User' },
messages: [ conversationMessageSchema ]
});
Donc, ma collection de destinataires, est une collection d'id d'objet faisant référence à mon schéma / collection utilisateur.
J'ai besoin de les remplir sur la requête, donc j'essaie ceci:
Conversation.findOne({ _id: myConversationId})
.populate('user')
.run(function(err, conversation){
//do stuff
});
Mais évidemment 'user' ne remplit pas...
Y a-t-il un moyen de le faire?
24
demandé sur
Alex
2012-05-13 03:46:32
2 réponses
Utilisez le nom du chemin du schéma au lieu du nom de la collection:
Conversation.findOne({ _id: myConversationId})
.populate('recipients') // <==
.exec(function(err, conversation){
//do stuff
});
25
répondu
aaronheckmann
2013-08-13 21:37:39
Pour toute autre personne rencontrant cette question.. le code de L'OP a une erreur dans la définition du schéma.. il devrait être:
var conversationSchema = new Schema({
created: { type: Date, default: Date.now },
updated: { type: Date, default: Date.now },
recipients: [{ type: Schema.ObjectId, ref: 'User' }],
messages: [ conversationMessageSchema ]
});
mongoose.model('Conversation', conversationSchema);
68
répondu
Duncan_m
2013-03-16 13:59:45