我有一个包含许多列的Collection:col1,col2,WebsiteCode,CreatedDate,col3 ....,coln。
我想在一系列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;
}
查询范围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
你能解释一下我做错了吗?
答案 0 :(得分:0)
您的reduce函数必须返回一个与发出值具有相同形状的值。因此,您无法在地图中使用Count
,在reduce中使用Total
。
请改为尝试:
function Reduce(key, values) {
var res = {Count:0};
values.forEach(function(value) {
res.Count += value.Count;
});
return res;
}