2015-05-05 67 views
3

我正在嘗試在每個Mongo文檔中GROUP BY和COUNT每個鍵,但鍵可能因文檔而異。我知道如何組,通過顯式調用這樣每個按鍵數:MongoDB GROUP BY和COUNT未知鍵

db.test.aggregate([{"$group" : {_id:"$vcenter", count:{$sum:1}}}]) 

,但我怎麼通過每個文檔的每個迭代的關鍵,而不必叫出鍵。我在想一個mapreduce函數?

下面是一個示例文件: 「KEY1」: 「VMX」, 「KEY2」: 「類型」, 「KEY3」: 「CPU空閒」,

,我期待有多少 「KEY1」:每樣關鍵記錄1564 「密鑰2」:1565 「鍵3」:458

+0

如果您能向我們展示一些樣本測試文檔和預期的輸出,那將會非常棒。 – chridam

回答

0

是的,我只能想到在MapReduce的,因爲in the aggregation $group the _id is mandatory。所以我寫

地圖

function map(){for(var prop in this){emit(prop,1)}} 

減少

function reduce(key,values){return values.length;} 

運行命令

db.inputCollectionName.mapReduce(map,reduce,{out:"outputCollectionName"}) 

你應該TH en在你的輸出集合中找到像

{ "_id" : "key1", "value" : 1564 } 
{ "_id" : "Key2", "value" : 1565 } 
{ "_id" : "Key3", "value" : 458 } 

這對你有好處嗎?