4

約 100 GB のデータと $match 式のフィールドごとの mongodb を使用して、インデックス (単一フィールド インデックス) を持っています。

今度は aggregate() を試して、パイプラインの最初の部分として $project を書き、この後ろに $match を書きました。

集計が実行され、正しい結果が返されますが、数時間かかります。これは本当にフィルタリングされた ($match) データのみを処理しますか、それとも mongo はデータの全範囲を集計して後でフィルタリングしますか?

私のテスト ケースでは、$match は (100GB の完全なデータ サイズではなく) 約 150MB をフィルター処理します。

うっかり順序を変えて、パイプライン定義の $project の前に $match を書いてしまいました。このように、数秒で完了しました。

通常、mongodb はいつ入力データを削減し、$match のフィールドのインデックスも処理しますか?

4

1 に答える 1