Unknown MongoDB GROUP BY and COUNT keys

I'm trying to GROUP BY and COUNT every key in every Mongo document, but the keys can be different from document to document. I know how to group and count by explicitly naming each key like this:

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


but how can I iterate over every key of every document without calling the keys. I think the function is mapreduce?

Here is an example document: "key1": "vmx", "key2": "type", "key3": "cpu-idle",

and I'm looking for how many records for such a key: "Key1": 1564 "Key2": 1565 "Key3": 458


source to share

1 answer

Yes, I can only think about mapreduce, since the _id parameter is required in the aggregated $ group . So I will write


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



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


execute command



Then you should find in your output collection something like

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


Is this good for you?



All Articles