在版本2我將三個步驟合到了一個腳本里 參見:link
1.首先join
代碼:
db.collection_1.aggregate([
{ "$lookup": {
"localField": "startKeyNo",
"from": "collection_2",
"foreignField": "keyNo",
"as": "node"
} }
// , { "$unwind": "$node" }
,{ "$project": {
"_id": 0,
"id": 1,
"type": 1,
"startNode": 1,
"startKeyNo": 1,
"endKeyNo": 1,
"endNode": 1,
"role": 1,
"node":1
} }
// ,{$out:"enterprise_with_node_name"}
])
解釋:
第二步:保留第一個join結果
第一步join的結果字段是一個Array類型的數據,如果想要做一個左外連接使用$unwind拆分即可,若是想僅保留第一個就不要拆分,先把第一步的結果使用$out輸出到一箇中間表中,再進行接下來的操作:
代碼:
db.中間表.aggregate(
[
{$project : {
"_id": 0,
"id": 1,
"type": 1,
"startNode": 1,
"startKeyNo": 1,
"endKeyNo": 1,
"endNode": 1,
"role": 1,
"test":{$slice:["$node", 1]}
}
}
,{ $unwind : "$test" }
,{$out:"中間表2"}
]
)
解釋:使用$slice 得到第一個
第三步:拆分字段
經過第二步以後,結果字段由數組變爲了非數組的document 這一步,進一步把document中的字段拆分出來
db.第二步的結果集合名稱.aggregate(
[
{$project : {
"node_name": "$test.name"
}
}
// ,{$out:"結果集合名稱"}
]
)
使用aggregate的$project , 使用$關鍵字和 . 得到屬性的屬性值