2014-12-18 4 views
0

У меня есть эта коллекцияСумма столбцов MongoDB

{a:0,b:1,c:1,d:1} 
{a:1,b:1,c:0,d:1} 
{a:1,b:1,c:0,d:1} 

и я хочу этот результат с MapReduce

{id: any, A:2,B:3,C:1,D:3} 

, но я не знаю, как сделать это, я могу только подвести ONDE collumn как я сделай это?

+0

Что вы подразумеваете под 'Я могу только суммировать onde collumn'? – BatScream

ответ

1

Вы могли бы emit общий ключ для всех записей, в функции map:

var map = function(){emit(1,this);} 

reduce функция будет вычислять сумму и возвращает значение.

var reduce = function(key,values){ 
var result = {}; 
values.forEach(function(i){ 
Object.keys(i).forEach(function(key){ 
if(result.hasOwnProperty(key)){ 
    result[key] = i[key]+result[key]; 
} 
else{ 
    result[key] = i[key]; 
} 
}) 
}) 
return result; 
} 

Выполнить карту уменьшить:

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

Если бы вы знали ключи, прежде чем руки, то вы можете легко объединить результаты, используя только $group этап в трубопроводе.

db.collection.aggregate([ 
{$group:{"_id":null, 
     "a":{$sum:"$a"}, 
     "b":{$sum:"$b"}, 
     "c":{$sum:"$c"}, 
     "d":{$sum:"$d"}}} 
]) 
Смежные вопросы