2016-03-12 97 views
1

我有一個模型A機智這個領域:貓鼬深填充不工作的多個二級對象

var field = { 
    foo: String, 
    b: [{ type: Schema.Types.ObjectId, ref: 'B' }] 
} 

和型號B這種精密組件這 -

A.find({_id:req.params.id}) 
    .populate({ path: 'patient', model: Patient, 
     populate: { 
      path: 'b', 
      model: B 
     }, 
     populate: { 
      path: 'c', 
      model: C 
     }, 
    }) 
    .exec(function (err, doc) { 
     res.send(doc); 
    }) 

- 它應該返回填充的第二級別,但它的確如此,但問題是它只有populate 函數聲明的最後path,在這種情況下只填充了模型C。但是,當您使用型號B更改其位置時,將填充型號B

上面的查詢返回這樣的事:

[ 
    { 
     "foo":"Bar", 
     "b": [ 
      { 
       "c":"a32s1da4fas1a23s1da56s4c", 
       "d":{ 
        "foo1":"Bar1", 
        "foo2":"Bar2", 
        "foo3":"Bar3" 
       } 
      }, 
      { 
       "c":"a32s1da4fas1a23s1da56s4d", 
       "d":{ 
        "foo1":"Bar1", 
        "foo2":"Bar2", 
        "foo3":"Bar3" 
       } 
      } 
      // so on ... 
     ] 
    } 
] 

我期待這樣的事情:

[ 
    { 
     "foo":"Bar", 
     "b": [ 
      { 
       "c":{ 
        "foo1":"Bar1", 
        "foo2":"Bar2", 
        "foo3":"Bar3" 
       }, 
       "d":{ 
        "foo1":"Bar1", 
        "foo2":"Bar2", 
        "foo3":"Bar3" 
       } 
      }, 
      { 
       "c":{ 
        "foo1":"Bar1", 
        "foo2":"Bar2", 
        "foo3":"Bar3" 
       }, 
       "d":{ 
        "foo1":"Bar1", 
        "foo2":"Bar2", 
        "foo3":"Bar3" 
       } 
      } 
      // so on ... 
     ] 
    } 
] 

回答

3

我不知道爲什麼它甚至接受多個對象中的populate鍵,它已經是 你指定填寫的是:

populate: { 
      path: 'b', 
      model: B 
     }, 
     populate: { 
      path: 'c', 
      model: C 
     }, 

在這裏財產populate得到重複,只有最後一個被定義的考慮。

您需要將填充路徑指定爲一個數組。所以,你填入屬性將變爲:

populate: [{ 
      path: 'b', 
      model: B 
     },{ 
      path: 'c', 
      model: C 
     }] 

並且查詢,

A.find({_id:req.params.id}) 
    .populate({ path: 'patient', model: Patient, 
     populate: [{ 
      path: 'b', 
      model: B 
     },{ 
      path: 'c', 
      model: C 
     }], 
    }) 
    .exec(function (err, doc) { 
     res.send(doc); 
    }) 
+0

哦,上帝!謝謝Naeem!我沒有注意到這一點。 – CENT1PEDE

+0

爲我節省了一些時間! http://mongoosejs.com/docs/populate.html#deep-populate – keithics

+0

@keithics ...只是你沒有正確閱讀或回答問題 –