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 , 使用$關鍵字和 . 得到屬性的屬性值

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