定义
cursor.explain(verbosity)重要
mongosh 方法
本页面提供
mongosh方法的相关信息。这不是特定于语言的驱动程序(例如 Node.js)的文档。如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。
提供有关
db.collection.find()方法的查询计划的信息。explain()方法采用以下形式:db.collection.find().explain() explain()方法具有以下参数:Parameter必要性类型说明verboseOptional
字符串
确定要包含在解释输出中的信息量。 可能的详细模式有:
allPlansExecutionexecutionStatsqueryPlanner(默认值)
为了向后兼容早期版本的
explain(), MongoDB将true解释为allPlansExecution,将false解释为queryPlanner。explain()方法返回包含查询计划和执行统计信息(可选)的文档。
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
注意
所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
必需的访问权限
要使用 explain,您必须有权运行根本的命令。
行为
注意
使用 explain 会忽略所有现有的计划缓存条目,并防止 MongoDB 查询计划器创建新的计划缓存条目。
Verbosity 模式
cursor.explain() 的行为和返回的信息量取决于 verbosity 模式。
queryPlanner 模式
默认情况下,cursor.explain() 以 queryPlanner 详细模式运行。
MongoDB 运行查询优化器,以便为正在接受评估的操作选择优胜计划。cursor.explain() 返回已评估方法的 queryPlanner 信息。
executionStats 模式
MongoDB 运行查询优化器来选择获胜计划并执行获胜计划直至完成,并返回描述获胜计划执行情况的统计信息。
cursor.explain() 返回被评估方法的 queryPlanner 和 executionStats 信息。但是,executionStats 并未提供被拒绝计划的查询执行信息。
allPlansExecution 模式
MongoDB 运行查询优化器来选择优胜计划并执行该计划直至完成。在 "allPlansExecution" 模式下,MongoDB 返回描述优胜计划执行情况的统计信息以及在计划选择期间捕获的其他候选计划的统计信息。
cursor.explain() 返回被评估方法的 queryPlanner 和 executionStats 信息。executionStats 包含优胜计划的已完成查询执行信息。
如果查询优化器考虑了多个计划,executionStats 信息则还包括在计划选择阶段为获胜和被拒计划收集的部分执行信息。
db.collection.explain().find()
db.collection.explain().find() 与 db.collection.find().explain() 相似,主要区别如下:
db.collection.explain().find()结构允许额外链接查询修饰符。要获取查询修饰符的列表,请参阅 db.collection.explain().find().help()。db.collection.find().explain()返回查询计划的explain()信息。
有关详细信息,请参阅 db.collection.explain()。
输出
cursor.explain() 操作可以返回以下信息:
explainVersion,输出格式版本(例如"1")。command,其中详细说明了要解释的命令。queryShapeHash,从MongoDB 8.0 开始,是一个十六进制 string,具有查询结构的哈希值。有关详情,请参阅查询结构、查询结构哈希和explain.queryShapeHash。queryPlanner,其详细说明了查询优化器选择的计划,并列出了被拒绝的计划。executionStats,其中详细说明了获胜计划的执行情况以及被拒计划。serverInfo,提供有关 MongoDB 实例的信息。serverParameters,其中详细说明了内部参数。
详细模式(例如 queryPlanner、executionStats、allPlansExecution )决定了结果是否包括 executionStats,以及 executionStats 是否包括计划选择期间捕获的数据。
解释输出会受到 BSON 文档的最大嵌套深度的限制,即 100 级嵌套。解释超出限制的输出会被截断。
有关输出的详细信息,请参阅解释结果。
例子
以下示例在“executionStats”详细模式下运行 cursor.explain(),以返回指定 db.collection.find() 操作的查询计划和执行信息:
db.products.find( { quantity: { $gt: 50 }, category: "apparel" } ).explain("executionStats")