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 回答