MongoDB 集約フレームワークを使用すると、$group機能がボトルネックであることは明らかです。いくつかの検索クエリで使用explain()することにより、インデックスを調整してテーブルスキャンを大幅に減らすことができますが、フィールドで並べ替えを行っても、以前に発生したことは$group考慮されていないようです。に。 $sort$group
単純に結果セットを減らす以外に、$group関数のパフォーマンスを向上させる実用的な方法はありますか? $group私はほとんどこの種の利点を利用して、自分のアプリケーションで実行したくなりますが、フレームワークを使用したエレガントでパフォーマンスの高いソリューションが必要です。
$matchからの結果セットが増加するにつれて、$group時間も増加することに気付きました。
私の文書は基本的にこのようなものです
{
a: (String)
b: (String)
}
次のpipelineような
$match :{ a : 'frank'}
$sort : { b : 1 }
$group : { _id : { $b : b }}
グループに到達するまでにデータがメモリにロードされ、フィールドにインデックスが付けられているため、数千のレコードをメモリにロードするのにそれほど時間がかからないはずなので、私には驚くべきことです。そうではありませんか?
$sort全体的なパフォーマンスには影響がないようです。のパフォーマンスを向上させるために、パイプラインの以前の機能と同様にインデックスを使用する方法はあります$groupか? また、$group前の関数の結果セット内にとどまりますか、それともテーブル全体のスキャンに戻りますか (私はかなり確信しています、またはそうでないことを願っています)