Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

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コマンドには次のフィールドがあります:

フィールド
タイプ
説明

planCacheSetFilter

string

コレクションの名前。

query

ドキュメント

インデックス フィルターに関連付けられたクエリ述語。 sortおよびprojectionとともに、 query述語は、指定されたインデックス フィルターのクエリシェイプを構成します。

フィールド名を含む述語の構造のみが重要です。クエリ述部の値は重要ではない。 そのため、クエリ述語は、値のみが異なる類似のクエリを対象とします。

sort

ドキュメント

任意。 フィルターに関連付けられたソート。 queryおよびprojectionとともに、 sortは、指定されたインデックス フィルターのクエリシェイプを構成します。

projection

ドキュメント

任意。 フィルターに関連付けられたプロジェクション。 queryおよびsortとともに、 projectionは、指定されたインデックス フィルターのクエリシェイプを構成します。

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 }を使用するインデックス付きプランのみを考慮します。

Tip

以下も参照してください。

戻る

planCacheListFilters