web-dev-qa-db-fra.com

Mongoose - utilisation de Populate sur un tableau d'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 ]
});

Ainsi, ma collection de destinataires est une collection d'ID d'objet faisant référence à mon schéma/collection utilisateur.

Je dois les remplir sur requête, donc j'essaye ceci:

Conversation.findOne({ _id: myConversationId})
.populate('user')
.run(function(err, conversation){
    //do stuff
});

Mais évidemment, "utilisateur" ne remplit pas ...

Existe-t-il un moyen de le faire?

29
Alex

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
});
28
aaronheckmann

Pour toute autre personne rencontrant cette question .. le code de l'OP a une erreur dans la définition du schéma .. cela 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);
80
Duncan_m