Ответ 1
Используйте имя пути схемы вместо имени коллекции:
Conversation.findOne({ _id: myConversationId})
.populate('recipients') // <==
.exec(function(err, conversation){
//do stuff
});
У меня есть схема, которая выглядит примерно так:
var conversationSchema = new Schema({
created: { type: Date, default: Date.now },
updated: { type: Date, default: Date.now },
recipients: { type: [Schema.ObjectId], ref: 'User' },
messages: [ conversationMessageSchema ]
});
Таким образом, моя коллекция получателей - это коллекция идентификатора объекта, ссылающаяся на мою схему пользователя/коллекцию.
Мне нужно заполнить их по запросу, поэтому я пытаюсь это сделать:
Conversation.findOne({ _id: myConversationId})
.populate('user')
.run(function(err, conversation){
//do stuff
});
Но, очевидно, "пользователь" не заполняет...
Есть ли способ, которым я могу это сделать?
Используйте имя пути схемы вместо имени коллекции:
Conversation.findOne({ _id: myConversationId})
.populate('recipients') // <==
.exec(function(err, conversation){
//do stuff
});
Для всех, кто сталкивается с этим вопросом.. код OP имеет ошибку в определении схемы.. он должен быть:
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);