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>, indexes: [ <index1>, <index2>, ...], comment: <any> } )
planCacheSetFilter
コマンドには次のフィールドがあります:
フィールド | タイプ | 説明 |
---|---|---|
| string | コレクションの名前。 |
| ドキュメント | インデックス フィルターに関連付けられたクエリ述語。 フィールド名を含む述語の構造のみが重要です。クエリ述部の値は重要ではない。 そのため、クエリ述語は、値のみが異なる類似のクエリを対象とします。 |
| ドキュメント | 任意。 フィルターに関連付けられたソート。 |
| ドキュメント | 任意。 フィルターに関連付けられたプロジェクション。 |
| 配列 | インデックス フィルターを次のいずれかとして指定します。
クエリオプティマイザはコレクションスキャンとこれらのインデックスのいずれかを選択するため、指定されたインデックスが 存在しないか、 非表示の場合、オプティマイザはコレクションスキャンを選択します。 同じキー パターンを持つインデックスが複数ある場合は、インデックスを名前で指定する必要があります。 |
| 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 }
を使用するインデックス付きプランのみを考慮します。