我创建了以下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的新手所以使用简单的术语:-) 感谢。
答案 0 :(得分:1)
两个问题(实际上是同一个问题):
您的发光格式必须与您在emit函数中返回的结果相同。
您的reduce必须准备好对同一个键调用多次(例如,如果为一个键减少五个值然后减少一个键的三个值,则可以再次调用reduce函数以减少之前两次减少操作的结果。
您的示例只是说明如果您假设始终将结果“1”减少而不是实际先前发出的或减少结果,会发生什么。
参考:http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-ReduceFunction