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>, collation: { <collation> }, indexes: [ <index1>, <index2>, ...], comment: <any> } )
索引筛选器的查询结构是以下各项的组合:
query
sort
projection
collation
命令字段
该命令具有以下字段:
字段 | 类型 | 说明 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
planCacheSetFilter | 字符串 | 索引筛选器的collection名称。 | ||||||||||
query | 文档 | 索引筛选器的查询谓词。 索引筛选器中仅使用谓词结构(包括字段名称)。 不使用查询谓词中的字段值。 因此,索引筛选器中的查询谓词由仅字段值不同的类似查询使用。 | ||||||||||
sort | 文档 | 可选。 索引筛选器的排序。 | ||||||||||
projection | 文档 | 可选。 索引筛选器的投影。 | ||||||||||
collation | 文档 | 指定用于操作的排序规则。 排序规则允许用户为字符串比较指定特定于语言的规则,例如字母大小写和重音符号规则。 排序规则选项的语法如下:
指定排序规则时, 如果未指定排序规则,但集合具有默认排序规则(请参阅 如果没有为收集或操作指定排序规则,MongoDB 将使用先前版本中使用的简单二进制比较来进行字符串比较。 您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果执行带排序的查找,则不能使用一种排序规则进行查找而另一种排序规则进行排序。 从 MongoDB6.0 开始,索引筛选器使用之前使用 命令设置的 排序规则 | ||||||||||
indexes | 阵列 | |||||||||||
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()
方法的 字段。
对由谓词、投影和排序组成的查询结构设置筛选器
以下示例为orders
collection创建了一个索引筛选器。该筛选器适用于其谓词为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
collection创建了一个索引筛选器。该筛选器适用于其谓词为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
。