2

我正在尝试运行一个简单的 MongoDB MapReduce 来计算我的数据库中的活动用户(见下文)。

由于某种原因,脚本似乎没有获取整个数据库。我有 400 条记录,但如果我计算总和,它只计算其中的 80 条。

我做错了什么还是每个键的值有限制?欢迎任何帮助。

db.user.mapReduce(
// map
function() {
        emit(this.state, {count: 1});
},

// reduce
function(key, val) {

    var counttotal = 0;
    var countActive = 0;

    for (var i in val) {
        data = val[i];

        counttotal++;

        // active state
        if (key == 1) {
            countActive++;
        }

    }

    return {
        countActive: countActive,
        counttotal: counttotal
    };

},

{
    out: {
        replace: "report"
    },
    query: {
        created_on: { $lt: new Date(2013, 8) }
    }
})
4

1 回答 1

0

您可以使用官方推荐的简单聚合框架管道,而不是 map-reduce:

db.states.aggregate([
  {$match: {created_on: { $lt: new Date(2013, 8) }}},
  {$project: {state: 1, active: {$cond: [{$eq: ["$state", 1]}, 1, 0]}}},
  {$group: {_id : "$state", total: {$sum: 1}, totalActive: {$sum: "$active"}}}
  ])
于 2013-09-24T22:27:29.860 回答