AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

planCacheSetFilter(データベースコマンド)

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

コマンドには次のフィールドがあります:

フィールド
タイプ
説明

planCacheSetFilter

string

インデックス フィルターのコレクションの名前。

query

ドキュメント

インデックス フィルターのクエリ述語。

インデックス フィルターでは、フィールド名を含む述語構造のみが使用されます。 クエリ述部のフィールド値は使用されません 。 そのため、インデックス フィルター内のクエリ述語は、 フィールド値のみが異なる同様のクエリによって使用されます。

sort

ドキュメント

任意。 The sort for the index filter.

projection

ドキュメント

任意。 インデックス フィルターの プロジェクション。

collation

ドキュメント

任意。操作に使用する照合を指定します。

照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。

照合オプションの構文は次のとおりです。

collation: { locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean>}

照合を指定する場合、locale フィールドは必須ですが、その他の照合フィールドはすべて任意です。フィールドの説明については、照合ドキュメントを参照してください。

照合が指定されていなくても、コレクションにデフォルトの照合が設定されている場合(db.createCollection() を参照)には、コレクションの照合が使用されます。

コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって文字列が比較されます。

1 つの操作に複数の照合は指定できません。たとえば、フィールドごとに異なる照合を指定できません。また、ソートと検索を一度に実行する場合、検索とソートで別の照合を使用できません。

MongoDB6.0 以降、インデックス フィルターは、以前は コマンドを使用して設定されていた planCacheSetFilter照合 を使用します。

indexes

配列

指定されたクエリシェイプのインデックス フィルターの配列。

インデックス フィルターを次の配列のいずれかとして指定します。

  • インデックス仕様ドキュメント。 たとえば、 [ { x : 1 }, ... ] 。

  • インデックス名。 たとえば、 [ "x_1", ... ] 。

クエリオプティマイザは、クエリプランにコレクションスキャンまたはインデックス配列のいずれかを使用します。 指定されたインデックスが 存在しないか、非表示の場合、オプティマイザはコレクションスキャンを使用します。

同じキー パターンを持つ複数のインデックスの場合は、名前の配列としてインデックスを指定する必要があります。

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照合 を使用します。