Mongoose使用null填充字段

时间:2014-02-06 08:13:04

标签: mongoose

我有一个猫鼬模式:

  mongoose.Schema({
    state: {
        type: {
           action: 'string' , 
           user: {type: mongoose.Schema.Types.ObjectId, 
           ref: 'User'}, 
           at: 'date'
       },
   default: {}
   },
   log: [{
           action: 'string' , 
           user: {type: mongoose.Schema.Types.ObjectId, 
           ref: 'User'}, 
           at: 'date'
       }]
})

尝试填充

Model.findById(id).populate('state.user').populate('log.user').exec(cb)

在查询结果中,日志项的“user”字段正确填充,“state.user”为空。可能是什么问题?

2 个答案:

答案 0 :(得分:2)

对于state之类的简单嵌入对象,请在不使用type的情况下定义结构:

mongoose.Schema({
    state: {
       action: 'string' , 
       user: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, 
       at: 'date'
    },
    log: [{
           action: 'string' , 
           user: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, 
           at: 'date'
    }]
})

populate('state.user')应该可以正常使用。

答案 1 :(得分:1)

在您的架构中,您有state.type.user,但您对populate的来电是state.user。填充调用中的路径与架构不匹配。

应为Model.findById(id).populate('state.type.user').populate('log.user').exec(cb)