0

MongoDB 2.0.7 & PHP 5

各配列の長さを数えようとしています。すべてのドキュメントには 1 つの配列があります。各配列の要素数とドキュメントの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 に答える