0

示例文档:

{
    "_id" : ObjectId("51cd7274267d959cb9f95cea"),
    "creation_time" : 100,
    "delivered" : true,
    "id" : 1,
    "user_id" : 10
}

地图功能:

db.system.js.save({
    _id: "mapDummy",
    value: function(){
        emit(this.user_id,this.user_id);
    }
});

减少功能:

db.system.js.save({
    _id: "reduceDummy",
    value: function(key,values){
        return Array.sum(values);
    }
});

mapReduce(...) 函数调用:

db.newsdb.mapReduce("mapDummy", "reduceDummy", {out: "notifications_result", query: {delivered:true}});

{
    "result" : "notifications_result",
    "timeMillis" : 16,
    "counts" : {
        "input" : 12,
        "emit" : 0,
        "reduce" : 0,
        "output" : 0
    },
    "ok" : 1,
}

为什么emit:0

4

2 回答 2

2

我认为这是因为您使用字符串而不是调用函数:

db.newsdb.mapReduce("mapDummy", "reduceDummy", {out: "notifications_result", query: {delivered:true}});

无论如何,我建议您使用聚合框架 (A/F),而不是 Map/Reduce。您似乎在 user_id 上进行了一个简单的分组,使用 A/F 效果更好,因为它更快更容易使用:

db.newsdb.aggregate( { $group: { _id: user_id, count: { $sum: 1 } } } );
于 2013-07-02T11:30:17.673 回答
0

经过一个小时的失败尝试......!

let maps = function() {
          emit(this. user_id, 1)
        };
let reduces = function(keys, vals){
          return Array.sum(vals);
        };

result.collection.mapReduce(maps, reduces, { out: { reduce: 'test_collection' 
}, jsMode: true, verbose: true})
.then(res=> console.log(res.stats))
.catch(err=> console.log({err}));

..我确定'mapReduce'不接受'Fat Arrows' =>=>=>=>|_ Maps || 减少!!

于 2020-03-16T09:42:17.820 回答