プランに複数のマイルストーンがあり、各マイルストーンに複数のタスクがあり、各タスクが外部タスク ドキュメントに関連付けられている 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の単なる配列であり、私が欲しいのはタスクドキュメントであるため、populateメソッドを試しました
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 ドキュメントの配列ではなく、Task ObjectID の配列しか取得できません。マングースの populate メソッドで間違っていることはありますか?