定義
- planCacheSetFilter
- コレクションのインデックス フィルターを設定します。 クエリシェイプのインデックス フィルターがすでに存在する場合、コマンドは前のインデックス フィルターを上書きします。 
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
- MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです 
重要
このコマンドは、M0 および Flex クラスターではサポートされていません。詳細については、「 サポートされていないコマンド 」を参照してください。
- MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン 
- MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン 
構文
このコマンドの構文は、次のとおりです。
db.runCommand(    {       planCacheSetFilter: <collection>,       query: <query>,       sort: <sort>,       projection: <projection>,       collation: { <collation> },       indexes: [ <index1>, <index2>, ...],       comment: <any>    } ) 
インデックス フィルターのクエリシェイプは、次の組み合わせです。
- query
- sort
- projection
- collation
コマンドフィールド
コマンドには次のフィールドがあります:
| フィールド | タイプ | 説明 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 
 | string | インデックス フィルターのコレクションの名前。 | ||||||||||
| 
 | ドキュメント | インデックス フィルターのクエリ述語。 インデックス フィルターでは、フィールド名を含む述語構造のみが使用されます。 クエリ述部のフィールド値は使用されません 。 そのため、インデックス フィルター内のクエリ述語は、 フィールド値のみが異なる同様のクエリによって使用されます。 | ||||||||||
| 
 | ドキュメント | 任意。 The sort for the index filter. | ||||||||||
| 
 | ドキュメント | 任意。 インデックス フィルターの プロジェクション。 | ||||||||||
| 
 | ドキュメント | 操作に使用する照合を指定します。 照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。 照合オプションの構文は次のとおりです。 照合を指定する場合、 照合が指定されていなくても、コレクションにデフォルトの照合が設定されている場合( コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって文字列が比較されます。 1 つの操作に複数の照合は指定できません。たとえば、フィールドごとに異なる照合を指定できません。また、ソートと検索を一度に実行する場合、検索とソートで別の照合を使用できません。 MongoDB 6.0 以降、インデックス フィルターは、以前は | ||||||||||
| 
 | 配列 | インデックス フィルターを次の配列のいずれかとして指定します。 
 クエリオプティマイザは、クエリプランにコレクションスキャンまたはインデックス配列のいずれかを使用します。 指定されたインデックスが 存在しないか、非表示の場合、オプティマイザはコレクションスキャンを使用します。 同じキー パターンを持つ複数のインデックスの場合は、名前の配列としてインデックスを指定する必要があります。 | ||||||||||
| 
 | any | 任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。 
 コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。 | 
インデックス フィルターは、サーバープロセスの実行中のみ存在し、シャットダウン後は保持されません。 インデックス フィルターをクリアするには、 planCacheClearFiltersコマンドを使用します。
必要なアクセス権
ユーザーには、 planCacheIndexFilterアクションを含むアクセス権が必要です。
例
述語のみを含むクエリシェイプにフィルターを設定
次の例では、 ordersコレクションにインデックス フィルターを作成し、プロジェクションとソートを持たないstatusフィールドの等価一致のみで構成されるクエリの場合、クエリオプティマイザは指定された 2 つのインデックスとコレクションスキャンのドキュメントのみを評価します。当選プラン:
db.runCommand(    {       planCacheSetFilter: "orders",       query: { status: "A" },       indexes: [          { cust_id: 1, status: 1 },          { status: 1, order_date: -1 }       ]    } ) 
クエリ述語では、フィールド名を含む述語の構造のみが重要です。値は重要ではありません。 そのため、作成されたフィルターは次の操作に適用されます。
db.orders.find( { status: "D" } ) db.orders.find( { status: "P" } ) 
MongoDB がクエリシェイプにインデックス フィルターを適用するかどうかを確認するには、 } メソッドまたは メソッドのindexFilterSet db.collection.explain()cursor.explain()フィールドを確認します。
述語、プロジェクション、ソートで構成されるクエリシェイプにフィルターを設定する
次の例では、 ordersコレクションのインデックス フィルターを作成しています。 フィルターは、述語がitemフィールドで等価一致するクエリに適用されます。 quantityフィールドのみがプロジェクションされ、 order_dateによる昇順の並べ替えが指定されます。
db.runCommand(    {       planCacheSetFilter: "orders",       query: { item: "ABC" },       projection: { quantity: 1, _id: 0 },       sort: { order_date: 1 },       indexes: [          { item: 1, order_date: 1 , quantity: 1 }       ]    } ) 
クエリシェイプの場合、クエリオプティマイザはインデックス{ item: 1, order_date: 1, quantity: 1 }を使用するインデックス付きプランのみを考慮します。
述語と照合で構成されたクエリシェイプにフィルターを設定する
次の例では、 ordersコレクションのインデックス フィルターを作成しています。 フィルターは、述語がitemフィールドと照合en_US (米国)の等価一致であるクエリに適用されます。
db.runCommand(    {       planCacheSetFilter: "orders",       query: { item: "Movie" },       collation: { locale: "en_US" },       indexes: [          { item: 1, order_date: 1 , quantity: 1 }       ]    } ) 
クエリシェイプの場合、クエリオプティマイザはインデックス{ item: 1, order_date: 1, quantity: 1 }を使用する インデックス付きプランのみ を使用します。
MongoDB6.0 以降、インデックス フィルターは、以前は コマンドを使用して設定されていた planCacheSetFilter照合 を使用します。