1

マップコード:

$map = new MongoCode("function(){
                emit(333,this);
}");

コードを減らす:

$reduce = new MongoCode("function(key, values) {
        r=0;
        for(var idx=0;idx<values.length;idx++){
                r+=1;
        }
        return r;
}");

実行コード:

$result = $db->command(array(
    "mapreduce" => "gameLog",
    "map" => $map,
    "reduce" => $reduce,
    "out" => array("replace" => "gameLogResult")
   )
);

実行コードの戻り値: Array ( [result] => gameLogResult [timeMillis] => 284 [counts] => Array ( [input] => 18864 [emit] => 18864 [reduce] => 189 [output] => 1 )

[ok] => 1

) map-reduce の結果は { "_id" : 333, "value" : 65 } です。バグの結果は { "_id" : 333, "value" : 18864 } だと思います。自分!

4

1 に答える 1

0

ここで同様の質問に答え、単純なケースで Map/Reduce バッチ処理がどのように機能するかを説明しました。

あなたがここで何をしようとしているのか、私は少し混乱しています。レコードをカウントするだけの場合は、なぜ使用しないのdb.gameLog.count()ですか? Map/Reduce を使用してレコードをカウントしたい場合は、次のようにすることができます (最適ではありませんが、最も簡単に理解できます)。

map = function(){
    emit("arbitrary_key", 1)
}

reduce = function(key, values){
    var total = 0;
    for (var i = 0; i < values.length; i++) {
        total += values[i];
    }
    return total;
}
于 2013-07-29T14:59:07.447 に答える