38

我有一个看起来有点像的模式:

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

但显然“用户”没有填充......

有没有办法我可以做到这一点?

4

2 回答 2

118

对于遇到此问题的其他任何人.. 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);
于 2012-11-06T03:20:29.827 回答
38

使用模式路径的名称而不是集合名称:

Conversation.findOne({ _id: myConversationId})
.populate('recipients') // <==
.exec(function(err, conversation){
    //do stuff
});
于 2012-05-14T21:33:37.970 回答