2012-08-23 84 views
0

MongoDB 2.0.7 & PHP 5如何提高這個MongoDB查詢的速度?

我試圖計算每個數組的長度。每個文檔都有一個數組。我想獲得每個數組中元素的數量和文檔的ID。除了Id以外,沒有索引。

這裏是我的代碼:

$map = new MongoCode("function() { 
    emit(this._id,{ 
    '_id':this._id,'cd':this.cd,'msgCount':this.cs[0].msgs.length} 
    ); 
}"); 

$reduce = new MongoCode("function(k, vals) { 
    return vals[0]; 
}"); 

$cmmd = smongo::$db->command(array(
    "mapreduce" => "sessions", 
    "map" => $map, 
    "reduce" => $reduce, 
    "out" => "result")); 

這些都是計時。正如你所看到的,查詢很慢

Array 
(
[result] => result 
[timeMillis] => 29452 
[counts] => Array 
(
[input] => 106026 
[emit] => 106026 
[reduce] => 0 
[output] => 106026 
) 
[ok] => 1 
) 

我怎樣才能減少計時?

+1

使用2.2和聚合框架。 –

+2

@JonathanOng請考慮到2.2尚不穩定。因此你不能只是說「使用2.2和聚合框架」的答案,直到2.2是穩定的,以及Stennies答案實際上比聚合框架更好。 – Sammaye

回答

4

如果你要經常需要爲您的陣列的數量,更好的辦法是在您的實際文檔count場。否則,您將掃描所有文檔以進行計數(按照您的Map/Reduce示例)。

在更新數組的同時,您可以使用Atomic Operation(如$inc)來遞增/遞減此計數。