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