我正在尝试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
答案 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 }
这对你有好处吗?