Docs 主页 → 开发应用程序 → MongoDB Manual
解释
定义
explain
explain
命令提供有关执行以下命令的信息:aggregate
、count
、distinct
、find
、findAndModify
、delete
、mapReduce
和update
。提示
在
mongosh
中,该命令还可以通过db.collection.explain()
和cursor.explain()
辅助方法运行。助手方法对于
mongosh
用户来说很方便,但它们返回的信息级别可能与数据库命令不同。如果不追求方便或需要额外的返回字段,请使用数据库命令。注意
使用
explain
会忽略所有现有计划缓存条目,并阻止 MongoDB 查询规划器创建新的计划缓存条目。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Atlas :用于在云中部署 MongoDB 的完全托管服务
注意
所有 MongoDB Atlas 集群都支持此命令。有关所有命令的信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
该命令具有以下语法:
db.runCommand( { explain: <command>, verbosity: <string>, comment: <any> } )
命令字段
该命令接受以下字段:
字段 | 类型 | 说明 |
---|---|---|
explain | 文档 | |
verbosity | 字符串 | |
comment | 注意到 | 可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:
注释可以是任何有效的 BSON 类型(字符串、整型、对象、数组等)。 注意如果您指定 |
行为
Verbosity 模式
explain
的行为和返回的信息量取决于verbosity
模式。
解释和写入操作
对于写入操作, explain
命令会返回将要执行的写入操作的相关信息,但不会实际修改数据库。
Stable API
稳定的 API 版本 1 支持 explain
命令的以下详细模式:
警告
MongoDB 不保证explain
命令的任何特定输出格式,即使使用 Stable API 时也是如此。
限制
从 MongoDB4 开始。2 ,您无法在explain
db.collection.explain()
executionStats
模式或allPlansExecution
模式下为包含 阶段的 运行aggregation pipeline
$out
命令/ 。相反,您可以:
输出
explain
操作可以返回以下信息:
explainVersion
,输出格式版本(例如,"1"
)。command
,其中详细说明了正在解释的命令。queryPlanner
,其中详细说明了查询优化器选择的计划并列出了被拒绝的计划。executionStats
,其中详细说明了获胜计划和被拒绝计划的执行情况。serverInfo
,提供有关 MongoDB 实例的信息。serverParameters
,其中详细说明了内部参数。
详细模式(例如 queryPlanner
、executionStats
、allPlansExecution
)决定了结果是否包括 executionStats
,以及 executionStats
是否包括计划选择期间捕获的数据。
解释输出会受到 BSON 文档的最大嵌套深度的限制,即 100 级嵌套。解释超出限制的输出会被截断。
有关输出的详细信息,请参阅解释结果。
举例
queryPlanner
模式
以下explain
命令在"queryPlanner"
详细模式下运行,返回count
命令的查询计划信息:
db.runCommand( { explain: { count: "products", query: { quantity: { $gt: 50 } } }, verbosity: "queryPlanner" } )
executionStats
模式
以下explain
操作在"executionStats"
详细模式下运行,返回count
命令的查询计划和执行信息:
db.runCommand( { explain: { count: "products", query: { quantity: { $gt: 50 } } }, verbosity: "executionStats" } )
allPlansExecution
模式
默认情况下,explain
在"allPlansExecution"
详细模式下运行。以下explain
命令会返回 命令的所有考虑计划的 和queryPlanner
executionStats
update
:
注意
执行该解释不会修改数据,但会运行更新操作的查询谓词。对于候选计划,MongoDB 会返回在计划选择阶段捕获的执行信息。
db.runCommand( { explain: { update: "products", updates: [ { q: { quantity: 1057, category: "apparel" }, u: { $set: { reorder: true } } } ] } } )