在MongoDB中的MapReduce中展示行

时间:2012-11-26 14:43:36

标签: mongodb

我创建了以下Map Reduce并遇到了一些好奇的东西。我用两种不同的方式计算每个日期的文档数量,并提出不同的值。这是我的职能:

map : function Map() {
    emit(
        this.cDate,//Holds a date value
        {
        count: 1, 
        }
    );
}

reduce : function Reduce(key, values) {
    var reduced = {count:0,count1:0};
    values.forEach(function(val) {
        reduced.count += val.count; 
        reduced.count1++;
    });

return reduced;
}

finalize : function Finalize(key, reduced) {
    return reduced;
}

query : { "cDate" : { "$gte" : ISODate("2012-11-20T00:00:00Z") } }

out : { inline : 1 }

所以基本上奇怪的是,最后“count”和“count1”返回不同的值。 “count”具有正确的值,即该日期的文档数,而“count1”具有更低的值。任何人都可以解释(我是MongoDB的新手所以使用简单的术语:-) 感谢。

1 个答案:

答案 0 :(得分:1)

两个问题(实际上是同一个问题):

  • 您的发光格式必须与您在emit函数中返回的结果相同。

  • 您的reduce必须准备好对同一个键调用多次(例如,如果为一个键减少五个值然后减少一个键的三个值,则可以再次调用reduce函数以减少之前两次减少操作的结果。

您的示例只是说明如果您假设始终将结果“1”减少而不是实际先前发出的减少结果,会发生什么。

参考:http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-ReduceFunction