2016-09-24 185 views
0

我有兩個不同的貓鼬收集如下:MongoDB的查詢+組與貓鼬

{ "_id" : 1, "countryId" : 1, "price" : 12, "quantity" : 24 } 
{ "_id" : 2, "countryId" : 2, "price" : 20, "quantity" : 1 } 
{ "_id" : 3 } 
{ "_id" : 4, "countryId" : 1, "price" : 12, "quantity" : 24 } 



{ "_id" : 1, "id" : 1, description: "Colombia"} 
{ "_id" : 3, "id" : 2, description: "Mexic" } 

我想它們聚集,這樣我可以有一個結果如下:

{"country":"Colombia","total":48} 
{"country":"Mexic","total":1} 

我已經嘗試了很多東西,但總是失敗,這裏是我正在工作的最後一個版本(我已經更改了數據,但你明白了) 它甚至有可能嗎?

回答

2

是的,這是可能的。您可以嘗試以下聚合管道。

var pipeline = [ 
        {"$match":{"countryId":{"$exists":true}}}, 
        {"$group" : {"_id":"$countryId", "quantity":{"$sum":"$quantity"}}}, 
        {"$lookup":{"from":"countryList","localField":"_id", "foreignField":"id","as":"country"}}, 
        {"$unwind":"$country"}, 
        {"$project": {"country":"$country.description", "total":"$quantity", _id:0}} 
       ] 

示例輸出:

{ "country" : "Mexic", "total" : 1 } 
{ "country" : "Colombia", "total" : 48 } 
+0

它工作直到查找,然後將展開的結果在一個空數組; /,如果刪除放鬆我得到{ 「國」:[], 「總」: 4234},{「country」:[],「total」:43} –

+0

@ Cam.phiefr更新了我的答案...將查詢集合從國家更改爲countryList – 4J41

+1

謝謝,完美無缺! –