Mongoose - 在ObjectId数组上使用Populate

Ale*_*lex 28 mongoose mongodb

我有一个看起来有点像的架构:

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

所以我的收件人集合是对象id引用我的用户架构/集合的集合.

我需要在查询中填充这些,所以我正在尝试这个:

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

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

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

Dun*_*n_m 81

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

  • 你先生救了我一个痛苦的世界.*小贴士* (3认同)
  • {type:Schema.ObjectId,ref:'User',unique:true} (3认同)

aar*_*ann 28

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

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

  • 不工作。返回空数组。 (2认同)