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 | 字符串 | 集合的名称。 |
query | 文档 | 与索引筛选器关联的查询谓词。 只有谓词的结构(包括字段名称)重要;查询谓词中的值无关紧要。 因此,查询谓词涵盖仅值不同的类似查询。 |
sort | 文档 | |
projection | 文档 | |
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 }
的索引计划。