Explain出力のコレクションスキャンはmap_levels
を参照しています queryPlanner.namespace
に記載されているコレクション 価値。 $lookup
ステージは、別のコレクションのデータを現在のパイプラインにマージします。 $lookup
の前にクエリステージを指定していないため 、map_levels
コレクションは、コレクションスキャンを使用して繰り返されます。コレクション全体がフィルタリングまたはソート基準なしでロードされている場合、コレクションスキャンは、インデックスを繰り返してドキュメントをフェッチするよりもオーバーヘッドが少なくなります。
$match
を追加することで、現在のコレクションスキャンを回避できます。 $lookup
の前のステージ (完全なmap_levels
を処理したくないと仮定します コレクション)。
残念ながら、クエリの説明の出力は(MongoDB 4.0のように)$lookup
のインデックスの使用法を示していません。 ステージ。この回避策は、ルックアップのpipeline
を使用してexplainを実行することです。 トップレベルの集計クエリとして。
MongoDB Issue Trackerで監視/賛成する関連する問題があります: SERVER-22622:$lookupを改善します「from」コレクションのクエリプランを示すために説明する 。