2013-08-30 25 views
0

我设计了一个mongodb模式,一个计划有多个里程碑,每个里程碑有多个任务,每个任务都与外部任务文档相关联。 这里是猫鼬实现我的MongoDB架构设计使用猫鼬填充方法,但仍返回ObjectID而不是文档

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

它的工作原理,但显然检索的任务只是任务对象ID的阵列,我要的是任务的文件,所以我尝试了填入方法

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

但我得到的仍然是任务ObjectI的阵列D,而不是任务文档的数组。 有什么我在猫鼬填充方法做错了?

回答

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

我只是尝试这种解决方案,它挥舞,我得到空的结果 – user824624

+0

.populate('plan.tasks ','task_description'),我有空阵列。而填充('任务','task_description')仍然返回一个ObjectID – user824624

+0

的数组,我的猫鼬版本是3.6.11 – user824624