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

Map/Reduce の代わりに、とにかく集計フレームワーク (A/F) を使用することをお勧めします。user_id で単純なグループ化を行っているようです。これは、はるかに高速で使いやすいため、A/F で提供される方がはるかに優れています。

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