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?
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
});
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);