我用它来获取创建的用户的天数,但是当我汇总结果的所有计数时,当我的集合有 10K 时,我总共获得了大约 200K 的用户。我错过了什么?
var mapFn= function() {
var dt = this._id.getTimestamp();
var yr = dt.getFullYear();
var mo = dt.getMonth() + 1;
var dy = dt.getDate();
var dt_str = yr + '-' + ((mo<10)?'0'+mo:mo) + '-' + ((dy<10)?'0'+dy:dy);
emit( dt_str, 1);
};
var redFn = function(k, v) {
return v.length;
};
db.users.mapReduce(mapFn, redFn, {out:{ "inline": 1 }});
显然reduce函数中的v是一个数组数组。 关于 mongos 部分的文档非常糟糕。 仍然很高兴它工作:)
这是代码:
var mapFn= function() {
var dt = this._id.getTimestamp();
var yr = dt.getFullYear();
var mo = dt.getMonth() + 1;
var dy = dt.getDate();
var dt_str = yr + '-' + ((mo<10)?'0'+mo:mo) + '-' + ((dy<10)?'0'+dy:dy);
emit( dt_str, {count: 1});
};
var redFn = function(k, v) {
var total = 0;
for(var i = 0; i < v.length; i++) { total += v[i].count; }
return {count: total};
};
db.users.mapReduce(mapFn, redFn, {out:{ "inline": 1 }});
回答了这个问题:MongoDB根据_id计算每分钟新文档的数量