2013-07-29 138 views
1

地圖代碼: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; 
}"); 

運行程序代碼:

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

運行代碼返回: Array ( [result] => gameLogResult [timeMillis] => 284 [計數] =>數組 ( [輸入] => 18864 [發射] => 18864 [減小] => 189 [輸出] => 1 )

[ok] => 1 

) map-reduce結果是{「_id」:333,「value」:65},錯誤我認爲結果是{「_id」:333,「value」:18864} 誰能告訴我爲什麼是這樣,幫幫我!

+0

這是因爲配料,精簡函數能夠而且將會運行多個次,每100個批次添加101個結果到下一個批次中,還需要減少你發射的東西而不是完全不同的東西 – Sammaye

回答

0

我回答了類似的問題here,解釋了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; 
} 
+0

我明白了,非常感謝 –