使用mongoose populate方法但仍返回ObjectID而不是文档

时间:2013-08-30 13:01:40

标签: node.js mongodb mongoose

我设计了一个mongodb架构,A计划有多个里程碑,每个里程碑都有多个任务,每个任务都与外部任务文档相关联。 这是我在mongoose中实现的mongodb的架构设计

var PlanSchema = new mongoose.Schema({
    plan:[   Milestone  ]
});    
var Milestone = mongoose.Schema({ 
    goal:String,
    tasks: [ 
       { type: ObjectId, ref: 'Task' } 
    ]
});

现在的目标是在计划中找到某个里程碑的所有任务,

PlanModel
    .findOne({'_id':pid },
       {
          'plan':{ $slice: [ milestone_number, 1 ] },
          'plan.tasks':1,'plan.goal':1 
       }, function(err, doc){
          if(err){ callback(err, null); }
          else {
             callback(null, doc);
          }
});

它有效,但显然检索到的任务只是一个Task ObjectID数组,我想要的是任务文档,所以我尝试了填充方法

PlanModel
    .findOne({'_id':pid }, 
             { 
                 'plan':{ $slice: [ number, 1 ] },
                 'plan.tasks':1,'plan.goal':1 
             })
    .populate('Task', 'task_description ')
    .exec( function(err, doc){
        if(err){callback(err, null);}
        else {
            callback(null, doc);
        }
    }) 

但我得到的仍然是Task ObjectID数组,而不是Task文档数组。 在mongoose中填充方法有什么问题吗?

1 个答案:

答案 0 :(得分:0)

您需要传递路径以填充populate调用而不是模型名称:

PlanModel.findOne({'_id':pid }, { 'plan':{ $slice: [ number, 1 ] }, 'plan.tasks':1,'plan.goal':1 })
  .populate('plan.tasks', 'task_description')
  .exec( function(err, doc) { 
    if(err){
      callback(err, null);
    } else { 
      callback(null, doc); 
    } 
  }
)