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の単なる配列であり、私が欲しいのはタスクドキュメントであるため、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 メソッドで間違っていることはありますか?

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 に答える