planCacheClearFilters
定义
planCacheClearFilters
删除在集合上删除索引过滤器。虽然索引过滤器只存在于服务器进程期间,并在关闭后不会持久化,但您也可以使用
planCacheClearFilters
命令来清除现有的索引过滤器。指定要删除特定索引过滤器的计划缓存查询形状。省略计划缓存查询形状将清除集合上的所有索引过滤器。
查询设置
从 MongoDB 8.0 版本开始,使用查询设置而不是添加 索引过滤器。从 MongoDB 8.0 版本开始,索引过滤器已被弃用。
查询设置比索引过滤器具有更多功能。此外,索引过滤器不可持久,并且您不能轻松地为所有集群节点创建索引过滤器。要添加查询设置并查看示例,请参阅 setQuerySettings
。
兼容性
此命令在以下环境中的部署中可用
MongoDB Atlas:云中MongoDB部署的完全托管服务
重要
此命令不支持M0、M2和M5集群。有关更多信息,请参阅不支持命令。
MongoDB Enterprise:基于订阅的、自管理的MongoDB版本
MongoDB Community:源代码开放、免费使用和自管理的MongoDB版本
语法
该命令具有以下语法
db.runCommand( { planCacheClearFilters: <collection>, query: <query pattern>, sort: <sort specification>, projection: <projection specification>, collation: { <collation> }, comment: <any> } )
命令字段
该命令具有以下字段
字段 | 类型 | 描述 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
planCacheClearFilters | string | 要从其中删除索引筛选器的集合名称。 | ||||||||||
查询 | 文档 | |||||||||||
排序 | 文档 | 可选。要删除的索引筛选器的排序,如果有的话。 | ||||||||||
投影 | 文档 | 可选。要删除的索引筛选器的投影,如果有的话。 | ||||||||||
校对 | 文档 | 指定操作要使用的校对。 校对允许用户指定字符串比较的语言特定规则,例如字母大小写和重音符号的规则。 排序选项具有以下语法
在指定排序时, 如果未指定排序,但集合具有默认排序(请参阅 如果没有为集合或操作指定排序,MongoDB将使用在先前版本中用于字符串比较的简单二进制比较。 您不能为一个操作指定多个排序。例如,您不能为每个字段指定不同的排序,或者在执行带排序的查找时,您不能为查找和排序使用不同的排序。 从MongoDB 6.0开始,索引过滤器使用之前使用 从 MongoDB 8.0 版本开始,使用查询设置而不是添加 索引过滤器。从 MongoDB 8.0 版本开始,索引过滤器已被弃用。 查询设置比索引过滤器具有更多功能。此外,索引过滤器不可持久,并且您不能轻松地为所有集群节点创建索引过滤器。要添加查询设置并查看示例,请参阅 | ||||||||||
注释 | 任何 | 可选。用户提供的注释,用于附加到此命令。设置后,此注释将出现在以下位置的相关记录旁边
注释可以是任何有效的BSON类型(字符串、整数、对象、数组等)。 |
必需访问
用户必须具有包括planCacheIndexFilter
操作的访问权限。
示例
清除集合上的特定索引过滤器
“orders”集合包含以下索引过滤器
{ "query" : { "status" : "A" }, "sort" : { "ord_date" : -1 }, "projection" : { }, "indexes" : [ { "status" : 1, "cust_id" : 1 } ] } { "query" : { "status" : "A" }, "sort" : { }, "projection" : { }, "indexes" : [ { "status" : 1, "cust_id" : 1 } ] } { "query": { "item": "Movie" }, "collation": { locale: "en_US" }, "indexes": [ { "item": 1, "order_date": 1 , "quantity": 1 } ] }
注意
从MongoDB 6.0开始,索引过滤器使用之前使用planCacheSetFilter
命令设置的排序。
从 MongoDB 8.0 版本开始,使用查询设置而不是添加 索引过滤器。从 MongoDB 8.0 版本开始,索引过滤器已被弃用。
查询设置比索引过滤器具有更多功能。此外,索引过滤器不可持久,并且您不能轻松地为所有集群节点创建索引过滤器。要添加查询设置并查看示例,请参阅 setQuerySettings
。
以下命令仅删除第二个索引过滤器
db.runCommand( { planCacheClearFilters: "orders", query: { "status" : "A" } } )
由于在查询谓词中的值在确定计划缓存查询形状时无意义,因此以下命令也会删除第二个索引过滤器
db.runCommand( { planCacheClearFilters: "orders", query: { "status" : "P" } } )
清除集合上的所有索引过滤器
以下示例清除“orders”集合上的所有索引过滤器
db.runCommand( { planCacheClearFilters: "orders" } )
清除包含查询和排序的索引过滤器
以下示例清除包含对 Movie
的查询和排序 en_US
的 orders
集合的索引过滤器
db.runCommand( { planCacheClearFilters: "orders", query: { item: "Movie" }, collation: { locale: "en_US" } } )