2015-08-26 46 views
0

鑑於這樣的數據:如何使用聚合管道按兩級分組進行排序?

[ {country:"US", city:"NY", cnt: 10} 
    {country:"IT", city:"MI", cnt: 9} 
    {country:"US", city:"LA", cnt: 8} 
    {country:"IT", city:"RM", cnt: 20} ] 

是否有使用MongoDB的聚合管道創建一個結果數組,看起來像這樣(不基於阿爾法碼,只是CNT)的方式:

[ {country:"IT", city:"RM", cnt:20} 
    {country:"IT", city:"MI", cnt: 9} 
    {country:"US", city:"NY", cnt:10} 
    {country:"US", city:"LA", cnt: 8} ] 

}

換句話說,一個數組按照總數最高的國家排序(降序),然後按每個城市的最高總數排序(降序)?

我可以按國家或國家和城市分組,但都不會給我上述結果。每個國家給我兩條總計,另一條給我四條國家城市總數,但沒有按總數最高的國家排序。在

{ "$sort": { "country": 1, "cnt": -1 } } 

結果:

+0

它這個聚合的結果已經或者它只是一個集合中的文件?還關心這些是文檔結果還是文檔中數組的一部分? –

回答

1

就在$group之後添加$sort

{ "country" : "IT", "city" : "RM", "cnt" : 20 } 
{ "country" : "IT", "city" : "MI", "cnt" : 9 } 
{ "country" : "US", "city" : "NY", "cnt" : 10 } 
{ "country" : "US", "city" : "LA", "cnt" : 8 } 

要使用總計然後小組獲得總計數:

{ "$group": { 
    "_id": "$country", 
    "cities": { "$push": { 
    "city": "$city", 
    "cnt": "$cnt" 
    }}, 
    "totalCount": { "$sum": "$cnt" } 
}}, 
{ "$unwind": "$cities" }, 
{ "$sort": { "totalCount": -1, "_id": 1, "cities.cnt": -1 }}, 
{ "$project": { 
    "_id": 0, 
    "country": "$_id", 
    "city": "$cities.city", 
    "cnt": "$cities.cnt" 
}} 

項目爲了得到s ame結果

+0

@ChrisGciso因此,只需加起來的國家。往上看 –

相關問題