MongoDB中的MapReduce错误

时间:2012-12-28 02:35:57

标签: mongodb mapreduce

我有一个包含许多列的Collection:col1,col2,WebsiteCode,CreatedDate,col3 ....,coln。

我想在一系列CreatedDate中按网站代码进行分组。

所以我这样做:

地图:

function Map() {
         var key={WebsiteCode:this.WebsiteCode};
         val={Count: 1};
         emit(key,val);
 }

减少:

function Reduce(key, values) {
var res = {Total:0};
values.forEach(function(value) {
res.Total += value.Count;
});
return res;
}

查询范围DateTime:

{ "CreatedDate" : { "$gte" : dateFrom , "$lte" : dateTo } }

最后,我运行这个mapreduce命令。 结果返回的结果不是我预期的Total = NaN多行 例如:{_id:{WebsiteCode:"websitecode1"}}, {value:{Total:NaN}}

但是当我运行count命令时:

db.collect.find({ "WebsiteCode" : "websitecode1", "CreatedDate" : { "$gte" : dateFrom), "$lte" : dateTo } }).count();

结果返回: 927

你能解释一下我做错了吗?

1 个答案:

答案 0 :(得分:0)

您的reduce函数必须返回一个与发出值具有相同形状的值。因此,您无法在地图中使用Count,在reduce中使用Total

请改为尝试:

function Reduce(key, values) {
    var res = {Count:0};
    values.forEach(function(value) {
        res.Count += value.Count;
    });
    return res;
}