web-dev-qa-db-ja.com

Mongoose-ObjectIdの配列でPopulateを使用する

私は少し次のようなスキーマを持っています:

var conversationSchema = new Schema({
    created: { type: Date, default: Date.now },
    updated: { type: Date, default: Date.now },
    recipients: { type: [Schema.ObjectId], ref: 'User' },
    messages: [ conversationMessageSchema ]
});

つまり、私の受信者コレクションは、ユーザースキーマ/コレクションを参照するオブジェクトIDのコレクションです。

これらをクエリで入力する必要があるので、これを試しています:

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

しかし、明らかに「ユーザー」は入力されていません...

これを行う方法はありますか?

29
Alex

コレクション名の代わりにスキーマパスの名前を使用します。

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

この質問に遭遇した他の人にとっては、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);
80
Duncan_m