Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

planCacheSetFilter

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 必需的访问权限
  • 示例
planCacheSetFilter

为集合设置索引过滤。 如果查询结构已存在索引过滤,该命令将覆盖以前的索引过滤。

此命令可用于以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

重要

M 0 、M 2和 M 5集群不支持此命令。 有关更多信息,请参阅不支持的命令。

该命令具有以下语法:

db.runCommand(
{
planCacheSetFilter: <collection>,
query: <query>,
sort: <sort>,
projection: <projection>,
indexes: [ <index1>, <index2>, ...],
comment: <any>
}
)

planCacheSetFilter命令具有以下字段:

字段
类型
说明
planCacheSetFilter
字符串
集合的名称。
query
文档

与索引筛选器关联的查询谓词。 query谓词与sortprojection一起构成指定索引筛选器的查询结构

只有谓词的结构(包括字段名称)重要;查询谓词中的值无关紧要。 因此,查询谓词涵盖仅值不同的类似查询。

sort
文档
可选。 与过滤关联的排序。 sortqueryprojection 构成指定索引过滤的查询结构
projection
文档
可选。 与过滤关联的投影。 projectionquerysort 构成指定索引过滤的查询结构
indexes
阵列

指定查询结构的索引筛选器数组。

将索引筛选器指定为:

  • 索引规范文档的数组,例如 [ { x : 1 }, ... ]

  • 索引名称大量,例如 [ "x_1", ... ]

由于查询优化器会在集合扫描和这些索引之间进行选择,因此如果指定的索引不存在或隐藏,优化器将选择集合扫描。

如果多个索引具有相同的键模式,则必须按名称指定索引。

comment
any

可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:

注释可以是任何有效的 BSON 类型(字符串、整型、对象、数组等)。

索引筛选器仅在服务器进程期间存在,关闭后不会持续存在;但是,您也可以使用planCacheClearFilters命令清除现有索引筛选器。

用户必须具有包括planCacheIndexFilter操作的访问权限。

以下示例在orders集合上创建了一个索引筛选器,这样对于仅包含status字段上的等值匹配而没有任何投影和排序的查询,查询优化器仅评估两个指定的索引,并且集合会扫描获胜计划:

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() 方法的 字段。

以下示例为orderscollection创建了一个索引筛选器。该筛选器适用于其谓词为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 }的索引计划。

提示

另请参阅:

后退

planCacheListFilters