我设计了一个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中填充方法有什么问题吗?
答案 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);
}
}
)