Подтвердить что ты не робот

Mongoose - использование Populate в массиве ObjectId

У меня есть схема, которая выглядит примерно так:

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

Но, очевидно, "пользователь" не заполняет...

Есть ли способ, которым я могу это сделать?

4b9b3361

Ответ 1

Используйте имя пути схемы вместо имени коллекции:

Conversation.findOne({ _id: myConversationId})
.populate('recipients') // <==
.exec(function(err, conversation){
    //do stuff
});

Ответ 2

Для всех, кто сталкивается с этим вопросом.. код 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);