我有这个集合
{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我是怎么做到的?
您可以在
map
函数中为所有记录emit
一个公用键:
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"}}}
])