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」コレクションのクエリプランを示すために説明する 。