0

我设计了一个mongodb模式,一个计划有多个里程碑,每个里程碑有多个任务,每个任务都与一个外部任务文档相关联。这是我在 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 文档的数组。猫鼬中的填充方法有什么问题吗?

4

1 回答 1

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); 
    } 
  }
)
于 2013-08-30T13:20:09.113 回答