sql >> データベース >  >> NoSQL >> MongoDB

mongodb-インデックスの代わりにCOLLSCANを使用する$lookupパイプライン

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




    1. mongodbでgroupbyを使用してMax()を選択します

    2. MongoDBインデックスと$or演算子

    3. ハウツー:ApacheHBaseでユーザー認証と承認を有効にする

    4. MongoDBとNeo4jを一緒に使用する