2012-08-23 35 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)来递增/递减此计数。