0

我创建了以下 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 新手,所以使用简单的术语 :-) 谢谢。

4

1 回答 1

1

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

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

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

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

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

于 2012-11-26T14:49:28.283 回答