MongoDB GROUP BY和COUNT个未知密钥

时间:2015-05-05 17:32:20

标签: mongodb mapreduce mongodb-query

我正在尝试GROUP BY和COUNT每个Mongo文档中的每个键,但键可能因文档而异。我知道如何通过显式调用每个键来分组和计数:

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

但是如何迭代每个文档的每个键而不必调用键。我正在考虑使用mapreduce函数吗?

这是一份示例文件:     " KEY1" :" vmx",     " KEY2" :"输入",     " KEY3" :" cpu-idle",

我正在寻找每个键有多少条记录,例如:     "键1" :1564     "密钥2" :1565     "密钥3" :458

1 个答案:

答案 0 :(得分: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"})

然后,您应该在输出集合中找到类似

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

这对你有好处吗?