0

MongoDB 2.0.7 和 PHP 5

我正在尝试计算每个数组的长度。每个文档都有一个数组。我想获取每个数组中的元素数和文档的 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
)

我怎样才能减少时间?

4

1 回答 1

4

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

您可以使用原子操作,例如$inc在更新数组的同时增加/减少此计数。

于 2012-08-23T07:06:19.167 回答