2017-03-21 86 views
0

我想爲2個集合設置與MongoDb的合併。 集合是嵌套的。 我有2個類別:mongo嵌套連接mongodb

1 /選項

{ 
    "_id": { 
     "$oid": "58c9866ff36d286bfca335b4" 
    }, 
    "design": { 
     "mainPage": { 
      "imgRight": "58cc750ddc238d05dd6ca525", 
      "imgLeft": "58cc750ddc238d05dd6ca526" 
     } 
    } 
} 

2 /表格

{ 
    "_id": { 
     "$oid": "58cc750ddc238d05dd6ca525" 
    }, 
    "imagePath": "logo.png" 
} 

我怎樣才能做一個彙總,以得到這樣的結果:

{ 
    "_id": { 
     "$oid": "58c9866ff36d286bfca335b4" 
    }, 
    "design": { 
     "mainPage": { 
      "imgRight": "58d07571d9d39e50166b5b3d", 
      "form_docs" : { 
       "imagePath": "logo.png" 
      } 
      "imgLeft": "58cc750ddc238d05dd6ca526", 
      "form_docs" : { 
       "imagePath": "" 
      } 
     } 
    } 
} 

我嘗試下面的代碼片段,但它不起作用:

Options.aggregate([ 
     { "$unwind": "$design" }, 
     { "$unwind": "$design.mainPage" }, 

     { 
      $lookup: 
      { 
       from: "forms", 
       localField: "design.mainPage.imgLeft", 
       foreignField: "_id", 
       as: "form_docs" 
      } 
     } 

]) 
+0

您沒有放鬆嵌套的文件。本地和外國收藏中您所加入的字段的類型應該相同。目前它的'ObjectId'和'String' – Veeram

+0

謝謝。當我只是做:'Options.aggregate([ {$ 查找: { 從 「形式」, localField: 「design.mainPage.imgLeft」, foreignField: 「_id」, 爲: 「form_docs」 }} ])' 它是不是也工作.. – alan

+1

它不會因爲'design.mainPage.imgLeft'(字符串類型)是'_id'(的ObjectId不同) – Veeram

回答

0

我已通過使用貓鼬populate()來解決我的問題。 http://mongoosejs.com/docs/populate.html

1 /定義模式:

var options = new Schema({ 
    design: { 
     mainPage : { 
     _imgLeft:[{type: Schema.Types.ObjectId, ref: 'Form'}], 
     _imgRight:[{type: Schema.Types.ObjectId, ref: 'Form'}], 
     } 
    }, 
    } 
); 

2 /貓鼬的功能是:

Options 
    .findOne() 
    .populate('design.mainPage._imgLeft') 
    .populate('design.mainPage._imgRight') 
    .exec(function (err, obj) { 
    return res.status(200).json({ 
     message: 'Successfull', 
     obj: obj 
    }) 
    }); 

感謝您的幫助