planCacheSetFilter
定義
planCacheSetFilter
コレクションのインデックスフィルターを設定します。 プランキャッシュクエリシェイプのインデックスフィルターがすでに存在する場合、 コマンドは前のインデックスフィルターを上書きします。
クエリ設定
バージョン8.0の新機能。
MongoDB 8.0以降では、インデックス フィルターを追加する 代わりに、 クエリ設定を使用します 。 インデックス フィルターは MongoDB 8.0以降非推奨です。
クエリ設定は、インデックス フィルターよりも多くの機能を持ちます。 また、インデックス フィルターは永続的ではなく、すべてのクラスター ノードに対してインデックス フィルターを簡単に作成することはできません。 クエリ設定を追加して例を探すには、 setQuerySettings
を参照してください。
クエリオプティマイザは、クエリ設定中にクエリ設定を追加入力として使用し、クエリを実行するために選択されたプランに影響します。
設定はクラスター全体のクエリシェイプに適用されます。 クラスターはシャットダウン後も設定を保持します。
find
、distinct
、aggregate
コマンドのクエリ設定を追加できます。
クエリ設定を削除するには、 removeQuerySettings
を使用します。 クエリ設定を取得するには、集計パイプラインの$querySettings
ステージを使用します。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
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 以降、インデックス フィルターは、以前は コマンドを使用して設定されていた MongoDB 8.0以降では、インデックス フィルターを追加する 代わりに、 クエリ設定を使用します 。 インデックス フィルターは MongoDB 8.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
照合 を使用します。
MongoDB 8.0以降では、インデックス フィルターを追加する 代わりに、 クエリ設定を使用します 。 インデックス フィルターは MongoDB 8.0以降非推奨です。
クエリ設定は、インデックス フィルターよりも多くの機能を持ちます。 また、インデックス フィルターは永続的ではなく、すべてのクラスター ノードに対してインデックス フィルターを簡単に作成することはできません。 クエリ設定を追加して例を探すには、 setQuerySettings
を参照してください。