cursor.explain()
定义
cursor.explain(verbosity)
重要
mongosh 方法
本页面提供
mongosh
方法的相关信息。这不是特定于语言的驱动程序(例如 Node.js)的文档。如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。
提供有关
db.collection.find()
方法的查询计划的信息。explain()
方法采用以下形式:db.collection.find().explain() explain()
方法具有以下参数:Parameter类型说明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
,其中详细说明了要解释的命令。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")