mongo mapReduce to group by object id创建日期给出的结果太少

时间:2015-04-21 21:19:53

标签: javascript node.js mongodb mapreduce

我使用它来获取创建的用户的白天计数,但是当我总结所有结果的计数时,当我的集合有200K时,我总共得到大约10K用户。 我错过了什么?

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 }});

1 个答案:

答案 0 :(得分:0)

显然,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 count number of new documents per minute based on _id