2017-08-24 97 views
0

我有2個集合coll1和coll2。我要上田「_id」和「comm_field」應用$查找,所以我使用的查詢:

db.coll1.aggregate([ 
    { 
     $lookup: 
     { 
      from: "coll2", 
      localField: "_id", 
      foreignField: "comm_field", 
      as: "inventory_docs" 
     } 
    }, 
    { 
     $project:{"_id" : 0, "inventory_docs" : 1} 
    }, 
    { $unwind:"$inventory_docs"} 
]) 

而得到的輸出爲:

/* 1 */ 
{ 
    "inventory_docs" : { 
     "_id" : ObjectId("ssdfsfsdfsdfsfsdfsdfsdfsfsdf"), 
     "comm_field" : NumberLong(1111), 
     "status" : "active" 
    } 
} 

/* 2 */ 
{ 
    "inventory_docs" : { 
     "_id" : ObjectId("erteterterterterterterterter"), 
     "comm_field" : NumberLong(1111), 
     "status" : "active" 
    } 
} 

/* 3 */ 
{ 
    "inventory_docs" : { 
     "_id" : ObjectId("vbvbfvbdbbcvbvcbcdrgvbcbcbcv"), 
     "comm_field" : NumberLong(2222), 
     "status" : "active" 
    } 
} 

有沒有什麼辦法讓我可以看到像輸出:

 { 
      "_id" : ObjectId("ssdfsfsdfsdfsfsdfsdfsdfsfsdf"), 
      "comm_field" : NumberLong(1111), 
      "status" : "active" 
     } 
     { 
      "_id" : ObjectId("erteterterterterterterterter"), 
      "comm_field" : NumberLong(1111), 
      "status" : "active" 
     } 
     { 
      "_id" : ObjectId("vbvbfvbdbbcvbvcbcdrgvbcbcbcv"), 
      "comm_field" : NumberLong(2222), 
      "status" : "active" 
     } 

所以基本上我想我的格式輸出{} ---而不是在{ 「inventory_docs」:{---}}

+1

使用'$ replaceRoot'或簡單的'$ project'字段可以在執行'$ unwind'之後返回子屬性。在將「$ project」放在「之前」之前,你並沒有真正獲益,或者至少沒有像你認爲的那樣獲得太多收益。直接在'$ lookup'之後放置'$ unwind'實際上是一個[管道優化](https://docs.mongodb.com/manual/core/aggregation-pipeline-optimization/#lookup-unwind-coalescence),即「將'$ unwind'提升到'$ lookup'本身。 –

+0

它工作。謝謝@NeilLunn – Shashank

+0

@NeilLunn $ replaceRoot工作但$項目沒有。根據你的建議,我改變了$ unwind和$ project的嵌入文檔值的順序。但仍然無法擺脫格式{「inventory_docs」:{---}}。我使用這個查詢現在:db.coll1.aggregate([ {$ 查找: { 來自: 「coll2」, localField: 「_id」, foreignField: 「comm_field」, 爲: 「inventory_docs」 } $ {$ unwind:「$ inventory_docs」}, {$ project:{「_ id」:0,「inventory_docs._id」:1,「inventory_docs.comm_field」:1,「inventory_docs.status」:1 }} ]) – Shashank

回答

0

尼爾的答案奏效了。 { $replaceRoot: { newRoot: "$inventory_docs" } }的增加完成了這項工作。謝謝尼爾。

db.coll1.aggregate([ 
    { 
     $lookup: 
     { 
      from: "coll2", 
      localField: "_id", 
      foreignField: "comm_field", 
      as: "inventory_docs" 
     } 
    }, 
    { 
     $project:{"_id" : 0, "inventory_docs" : 1} 
    }, 
    { $unwind:"$inventory_docs"}, 
    { $replaceRoot: { newRoot: "$inventory_docs" } } 
])