2017-02-16 44 views
0

我正在嘗試爲文檔中的嵌入式數組檢索一些查找數據。下面是數據的一個示例:

[ 
    { 
     "_id": "58a4fa0e24180825b05e14e9", 
     "user_id": "589cf6511b94281f34617a13", 
     "user": { 
     "firstname": "John", 
     "lastname": "Doe" 
     }, 
     "stages": [ 
     { 
      "user_id": "589cf6511b94281f34617a13" 
     }, 
     { 
      "user_id": "589cf6511b94281f346343c3" 
     } 
     ], 
    } 
] 

正如所看到的,stages是一個數組,僅含有user_id字段。這些指向另一個名爲users的集合中的_id字段。

這裏是我得到了上述結果:

db.collection('things').aggregate([{ 
     $match: finder 
    }, 
    { 
     $lookup: { 
      from: 'users', 
      localField: 'user_id', 
      foreignField: '_id', 
      as: 'user' 
     } 
    }, 
    { 
     $unwind: '$user' 
    } 
]); 

現在,這是非常簡單的:選擇的記錄,與user場擡起頭$lookup。但我怎樣才能與stages的元素一樣?理想的結果是這樣的:

[ 
    { 
     "_id": "58a4fa0e24180825b05e14e9", 
     "user_id": "589cf6511b94281f34617a13", 
     "user": { 
     "firstname": "John", 
     "lastname": "Doe" 
     }, 

     "stages": [ 
     { 
      "user_id": "589cf6511b94281f34617a13", 
      "firstname": "John", 
      "lastname": "Doe" 
     }, 
     { 
      "user_id": "589cf6511b94281f346343c3" 
      "firstname": "Jane", 
      "lastname": "Doe" 
     } 
     ], 
    } 
] 

回答

0

重複仍持有,但我認爲不僅沒有明顯的部分是,如果你可以更新結構

"stages": ["589cf6511b94281f34617a13","589cf6511b94281f346343c3"] 

你可以簡單地逃脫(已經提在重複的帖子中),如果你在Mongo版本3.3.4及以上。

db.things.aggregate([{ 
    $lookup: { 
     from: 'users', 
     localField: 'stages', 
     foreignField: '_id', 
     as: 'stages' 
    } 
}]) 
0

我相信你缺少的是在階段開卷和後組呼叫。我測試下面的代碼,並得到了類似的結果:

db.collection('things').aggregate([ 
       { $match: finder }, 
       { $lookup: { from: 'users', 
          localField: 'user_id', 
           foreignField: '_id', 
           as: 'user' 
          } 
       }, 
       { $unwind: '$stages' }, 
       {$lookup : {from : 'users', localField: 'stages.user_id', foreignField: '_id', as : 'stages'}}, 
       {$group : { _id: '$_id', userId: "$userId",..., stages: {$push : "$stages"}}} 
       ]); 

希望我的代碼是有用的

+0

現在說:「這個領域USER_ID必須是蓄電池對象」。 –

+0

我的不好,請在你想提取的字段之前放一個$。像{_id:'$ _id',userId:「$ user_id」... –

+0

不,依然如此。 –

相關問題