在版本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 , 使用$关键字和 . 得到属性的属性值