Mongoose - 在ObjectId数组上使用Populate

时间:2012-05-12 23:46:33

标签: mongodb mongoose

我的架构看起来有点像:

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

但显然'用户'没有填充......

我有办法做到这一点吗?

2 个答案:

答案 0 :(得分:78)

对于其他遇到此问题的人来说,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);

答案 1 :(得分:26)

使用架构路径的名称而不是集合名称:

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