減少蒙戈功能需要一張地圖由蒙戈在PHP減少功能需要一張地圖使用PHP
這是我的蒙戈結構
[_id] => MongoId Object (
[$id] => 4fcf2f2313cfcd2454500000d
)
[id] => 454
[table] => people
[news] => Array (
[03-06-2012] => 2
[04-06-2012] => 3
[05-06-2012] => 5
[06-06-2012] => 4
)
在這裏,我試圖總結數組新聞與下面的代碼,
$map = new MongoCode('function() { emit(this.news, 1); }');
$reduce = new MongoCode('function(previous, current) {
var count = 0;
for (index in current) {
count = count + current[index];
}
return count;
}');
$sales = $db->command(array(
'mapreduce' => 'mycollection',
'map' => $map,
'reduce' => $reduce,
'query' => array('table' => 'people'),
'out' => 'news'
));
//pr($sales);exit;
$users = $db->selectCollection($sales['result'])->find();
foreach ($users as $user) {
//echo "{$user['_id']} had {$user['value']} sale(s).\n";
pr($user);
}
當pr($user)
Array
(
[_id] => Array
(
[04-06-2012] => 0
[08-06-2012] => 2
[11-06-2012] => 6
)
[value] => 39540
)
我在哪裏預期值將是8而不是39540.
我該如何糾正這個函數以及如何將字段總和作爲'news'的數組總和添加到原始集合(mycollection)中?
我不熟悉mongo中的地圖縮減功能。
我也跟着用純suming PHP和工作克好。但我試圖得到與地圖減少,但新的集合輸出爲[[id] => MongoId對象( [$ id] => 4fd8993a13cfcd4e42000000 ) [value] => 0013-06-2012'原始新聞數組是'[news] => Array( [13-06-2012] => 1 )'。快照是否會提高性能? –
如果您嘗試使用map/reduce計算總和,則該值應該是整數和。就你而言,看起來你正在發佈新聞日期而不是總和。我上面的例子演示瞭如何使用map和reduce函數來計算總和。關於你的第二個問題,我沒有意識到任何快照記錄的性能影響,但可以假設有一些輕微的開銷是合理的。 – jmikola