planCacheSetFilter
定義
planCacheSetFilter
コレクションのインデックス フィルターを設定します。 クエリシェイプのインデックス フィルターがすでに存在する場合、コマンドは前のインデックス フィルターを上書きします。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
重要
このコマンドは、M 0 、M 2 、M 5クラスターではサポートされていません。 詳細については、「サポートされていないコマンド 」を参照してください。
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
コマンドフィールド
コマンドには次のフィールドがあります:
フィールド | タイプ | 説明 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
planCacheSetFilter | string | インデックス フィルターのコレクションの名前。 | ||||||||||
query | ドキュメント | インデックス フィルターのクエリ述語。 インデックス フィルターでは、フィールド名を含む述語構造のみが使用されます。 クエリ述部のフィールド値は使用されません 。 そのため、インデックス フィルター内のクエリ述語は、 フィールド値のみが異なる同様のクエリによって使用されます。 | ||||||||||
sort | ドキュメント | 任意。 The sort for the index filter. | ||||||||||
projection | ドキュメント | 任意。 インデックス フィルターの プロジェクション。 | ||||||||||
collation | ドキュメント | 操作に使用する照合を指定します。 照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。 照合オプションの構文は次のとおりです。
照合を指定する場合、 照合が指定されていなくても、コレクションにデフォルトの照合が設定されている場合( コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって文字列が比較されます。 1 つの操作に複数の照合は指定できません。たとえば、フィールドごとに異なる照合を指定できません。また、ソートと検索を一度に実行する場合、検索とソートで別の照合を使用できません。 MongoDB6.0 以降、インデックス フィルターは、以前は コマンドを使用して設定されていた | ||||||||||
indexes | 配列 | インデックス フィルターを次の配列のいずれかとして指定します。
クエリオプティマイザは、クエリプランにコレクションスキャンまたはインデックス配列のいずれかを使用します。 指定されたインデックスが 存在しないか、非表示の場合、オプティマイザはコレクションスキャンを使用します。 同じキー パターンを持つ複数のインデックスの場合は、名前の配列としてインデックスを指定する必要があります。 | ||||||||||
comment | 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
照合 を使用します。