クエリを最適化するために行うことはたくさんあります。私が試すこと:
-
Anthony Winzletがコメントで述べたように、最初のステージとして可能な限り$matchステージを使用します。このようにして、次の段階に渡されるドキュメントの数を減らし、インデックスを使用できます。
-
3.6以上のmongoバージョンを使用していると仮定して、「let / pipeline」構文(ここを参照 )。このようにして、ルックアップパイプラインの$ matchステージに「外部フィルター」(「customer_info.status」:{$ ne:9}、「model_info.status」:{$ ne:9})を統合できます。右のフィールド/コレクションにインデックスを付けると、$lookupステージで時間/メモリを獲得できます。
-
次のステージに渡されるドキュメントの数を制限するために、できるだけ遅くステージを巻き戻します。
集約パイプラインがどのように機能するかを理解することが重要です。各ステージはデータを受信し、その処理を実行して、データを次のステージに渡します。したがって、パイプラインに渡されるデータが少ないほど、クエリは高速になります。