mongodb映射减少的输出结果比我想象的要少
地图代码:mongodb映射减少的输出结果比我想象的要少,mongodb,Mongodb,地图代码: $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; }")
$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;
}");
运行代码返回:
大堆
[结果]=>gameLogResult
[timeMillis]=>284
[计数]=>阵列
[输入]=>18864
[发射]=>18864
[减少]=>189
[输出]=>1
map-reduce的结果是{u-id:333,value:65},bug我假设的结果是{u-id:333,value:18864}
谁能告诉我这是为什么,帮帮我 我回答了一个类似的问题,解释了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;
}
这是因为批处理,reduce函数可以并且将运行多次,每100批运行一次,将101个结果添加到下一批中,您还需要减少您的排放量,而不是完全不同。我明白了,非常感谢
[ok] => 1
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;
}