Performance 如何提高MongoDB查询的速度?

Performance 如何提高MongoDB查询的速度?,performance,mongodb,mapreduce,Performance,Mongodb,Mapreduce,MongoDB2.0.7和PHP5 我试图计算每个数组的长度。每个文档都有一个数组。我想得到每个数组中的元素数和文档的ID。除了Id之外,没有其他索引 这是我的密码: $map = new MongoCode("function() { emit(this._id,{ '_id':this._id,'cd':this.cd,'msgCount':this.cs[0].msgs.length} ); }"); $reduce = new MongoCode("functi

MongoDB2.0.7和PHP5

我试图计算每个数组的长度。每个文档都有一个数组。我想得到每个数组中的元素数和文档的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
)

如何减少计时?

如果您经常需要数组的计数,更好的方法是在实际文档中包含一个
count
字段。否则,您将扫描所有文档以进行计数(根据您的Map/Reduce示例)


您可以在更新数组的同时使用诸如来增加/减少此计数。

如果您经常需要数组的计数,更好的方法是在实际文档中包含一个
计数
字段。否则,您将扫描所有文档以进行计数(根据您的Map/Reduce示例)


您可以在更新阵列的同时使用诸如来增加/减少此计数。

使用2.2和聚合框架。@JonathanOng请考虑2.2还不稳定。因此,在2.2稳定之前,你不能对答案说“使用2.2和聚合框架”,而且Stennies的答案实际上比聚合框架好。使用2.2和聚合框架。@JonathanOng请考虑到2.2还不稳定。因此,在2.2稳定之前,您不能对答案说“使用2.2和聚合框架”,而且Stennies的答案实际上比聚合框架更好。