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