定义
PlanCache.clearPlansByQuery( <query>, <projection>, <sort> )清除指定计划缓存查询结构的缓存查询计划。
重要
mongosh 方法
本页面提供
mongosh方法的相关信息。这不是数据库命令或特定语言驱动程序(例如 Node.js)的相关文档。有关数据库命令,请参阅
planCacheClear命令。如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。
该方法只能从特定集合的
plan cache object获得;即db.collection.getPlanCache().clearPlansByQuery( <query>, <projection>, <sort>, <collation> ) PlanCache.clearPlansByQuery()方法接受以下参数:Parameter类型说明query文档
计划缓存查询结构的查询谓词。 只有谓词的结构(包括字段名称)对形状重要;查询谓词中的值无关紧要。
projection文档
可选。 与计划缓存查询结构关联的投影。 如果指定了
sort参数,则为必填项。sort文档
可选。 与计划缓存查询结构关联的排序。
collation文档
可选。指定用于操作的排序规则。
排序规则允许用户为字符串比较指定特定于语言的规则,例如字母大小写和重音符号规则。
排序规则选项的语法如下:
collation: { locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> } 指定排序规则时,
locale字段为必填字段;所有其他排序规则字段均为可选字段。有关字段的说明,请参阅排序规则文档。如果未指定排序规则,但集合具有默认排序规则(请参阅
db.createCollection()),则操作将使用为集合指定的排序规则。如果没有为收集或操作指定排序规则,MongoDB 将使用先前版本中使用的简单二进制比较来进行字符串比较。
您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果执行带排序的查找,则不能使用一种排序规则进行查找而另一种排序规则进行排序。
要查看存在缓存查询计划的查询结构,请参阅示例。
从 MongoDB 8.0开始,使用查询设置而不是添加索引筛选器。 从 MongoDB 8.0开始,索引筛选器已弃用。
查询设置的功能比索引筛选器更多。 此外,索引筛选器不是持久性的,您无法轻松地为所有集群节点创建索引筛选器。 要添加查询设置并探索示例,请参阅setQuerySettings 。
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
必需的访问权限
在使用 authorization 运行的系统中,用户必须拥有包括 planCacheWrite 操作在内的访问权限。
例子
如果集合orders具有以下计划缓存查询结构:
{ "query" : { "qty" : { "$gt" : 10 } }, "sort" : { "ord_date" : 1 }, "collation" : { locale : "fr" }, "projection" : { }, "planCacheShapeHash" : "9AAD95BE" }
警告
从MongoDB 8.0 开始,现有的 queryHash字段将复制到名为 planCacheShapeHash 的新字段中。 如果您使用的是早期MongoDB版本,则只能看到 queryHash字段。 未来的MongoDB版本将删除已弃用的 queryHash字段,您需要改用 planCacheShapeHash字段。
以下操作会删除为该形状缓存的查询计划:
db.orders.getPlanCache().clearPlansByQuery( { "qty" : { "$gt" : 10 } }, { }, { "ord_date" : 1 }, { locale: "fr" } )
提示
PlanCache.listQueryShapes()