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

集約パイプラインとインデックス

    通常、通常のクエリ($match)にフラット化できるパイプライン演算子のみ 、$limit$sort 、および$skip )コレクションのインデックスを使用できるようになります。これが、$geoNearの理由の1つです。 2.4で追加された演算子は、パイプラインの開始時にある必要があります。

    $projectでドキュメントを変更したら 、$group 、または$unwind インデックスは無効/使用できなくなりました。

    配列フィールドにインデックスがある場合でも、$unwindの前に使用できます。 パイプラインするドキュメントの選択を高速化し、選択したドキュメントを2番目の$matchでさらに絞り込みます。 。

    次のようなドキュメントを検討してください:

    { tags: [ 'cat', 'bird', 'blue' ] }
    

    tagsにインデックスを付ける 。

    bで始まるタグのみをグループ化する場合 次に、次のような集計を実行できます:

    { pipeline: [
          { $match : { tags : /^b/ } },
          { $unwind : '$tags' },
          { $match : { tags : /^b/ } },
          /* the rest */
      ] }
    

    最初の$match tagsのインデックスを使用して粗粒度を一致させますか 。

    $unwindの後の2番目の一致 インデックスを使用することはできませんが(上記のドキュメントは3つのドキュメントになります)、これらの各ドキュメントを評価して、作成される余分なドキュメントを除外できます(例から{tags:'cat'}を削除します)。

    HTH-ロブ。



    1. ループバック:オブジェクトサブフィールドのフィルター付近

    2. Mongoidモデルの動的属性を一覧表示します

    3. Mongodb-1つのクエリで、今日の合計、週の合計、および月の合計をクエリします

    4. MongoDBスキーマ設計(ネストされた配列と個別のコレクション)