2015-05-05 4 views
3

Я пытаюсь GROUP BY и COUNT каждый ключ в каждом документе Mongo, но ключи могут отличаться от документа к документу. Я знаю, как группировать и считать явным вызовом каждого ключа, как это:MongoDB GROUP BY и COUNT неизвестные ключи

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

но как я итерацию по каждому ключу каждого документа без вызова из ключей. Я думаю, что функция mapreduce?

Вот пример документа: "key1": "VMX", "key2": "тип", "ключ3": "CPU-простаивает",

и я ищу, сколько записи на ключ, как: "Key1": 1564 "Клавишу2": 1565 "Key3": 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"}) 

Вы должны чт en найти в вашей сборнике что-то вроде

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

Это вам подходит?