我正在尝试运行一个简单的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) }
}
})
答案 0 :(得分: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"}}}
])