MongoDB 使用aggregate做join连接 并保留第一个join结果(一)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章