总和列mongodb

时间:2014-12-18 01:30:17

标签: mongodb mapreduce

我有这个集合

{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}

但我不知道怎么做,我只能总结一下 我是怎么做到的?

1 个答案:

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

执行map reduce:

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"}}}
])