【问题标题】:Wrong MapReduce result in MongoDBMongoDB 中的 MapReduce 结果错误
【发布时间】:2012-12-28 12:28:19
【问题描述】:

我有一个包含许多列的集合:col1、col2、WebsiteCode、CreatedDate、col3....、coln。

我想在 CreatedDate 范围内按 WebsiteCode 分组。

所以我这样做:

地图:

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

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

【问题讨论】:

    标签: mongodb mapreduce


    【解决方案1】:

    您的 reduce 函数必须返回一个与发出的值具有相同形状的值。所以你不能在map中使用Count,在reduce中使用Total

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多