2012-12-28 28 views
0

我有一个包含许多列的集合:col1,col2,WebsiteCode,CreatedDate,col3 ....,coln。MongoDB中错误的MapReduce结果

我想通过WebsiteCode在一个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; 
} 

和查询范围的日期时间:

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

最后,我运行这个mapreduce命令。 结果返回不出我所料具有Total = NaN 防爆许多行:{_id:{WebsiteCode:"websitecode1"}}, {value:{Total:NaN}}

但是当我运行计数命令:

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

结果回报:

你能解释一下对我而言,我做错了什么?

回答

0

您的reduce函数必须返回一个与发射值形状相同的值。因此,您不能在地图中使用Count,并且在减少中使用Total

试试这个:

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

好了,它的完成。许多人感谢@JohnnyHK – Sonrobby