Docs 主页 → 开发应用程序 → MongoDB Manual
cursor.explain()
定义
cursor.explain(verbosity)
重要
mongosh 方法
本页介绍了
mongosh
方法。这不是特定于语言的驱动程序(例如 Node.js)的文档。对于 MongoDB API 驱动程序,请参阅特定语言的MongoDB 驱动程序文档。
提供有关
db.collection.find()
方法查询计划的信息。explain()
方法采用以下形式:db.collection.find().explain() explain()
方法具有以下参数:范围类型说明verbose
字符串可选。指定解释输出的详细模式。该模式会影响
explain()
的行为并确定要返回的信息量。可能的模式有:"queryPlanner"
、"executionStats"
和"allPlansExecution"
。默认模式为
"queryPlanner"
。为了与早期版本的
cursor.explain()
向后兼容,MongoDB 将true
解释为"allPlansExecution"
,将false
解释为"queryPlanner"
。有关模式的更多信息,请参阅详细模式。
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()
返回一个游标,需要调用.next()
或其别名.finish()
才能返回explain()
结果。如果在mongosh
中以交互方式运行,则mongosh
会自动调用.finish()
以返回结果。但是,对于脚本,您必须显式调用.next()
或.finish()
才能返回结果。有关游标相关方法的列表,请参阅db.collection.explain().find().help()。
有关详细信息,请参阅 db.collection.explain()
。
输出
cursor.explain()
操作可以返回以下信息:
explainVersion
,输出格式版本(例如,"1"
)。command
,其中详细说明了正在解释的命令。queryPlanner
,其中详细说明了查询优化器选择的计划并列出了被拒绝的计划。executionStats
,其中详细说明了获胜计划和被拒绝计划的执行情况。serverInfo
,提供有关 MongoDB 实例的信息。serverParameters
,其中详细说明了内部参数。
详细模式(例如 queryPlanner
、executionStats
、allPlansExecution
)决定了结果是否包括 executionStats
,以及 executionStats
是否包括计划选择期间捕获的数据。
解释输出会受到 BSON 文档的最大嵌套深度的限制,即 100 级嵌套。解释超出限制的输出会被截断。
有关输出的详细信息,请参阅解释结果。
例子
以下示例在cursor.explain()
"executionStats" 详细模式下运行 ,以返回指定db.collection.find()
操作的查询计划和执行信息:
db.products.find( { quantity: { $gt: 50 }, category: "apparel" } ).explain("executionStats")