对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。

解释(数据库命令)

explain

explain 命令提供以下命令的执行信息:aggregate、count、distinct、find、findAndModify、delete、mapReduce 和 update。

提示

在 mongosh 中,该命令也可以通过 db.collection.explain() 和 cursor.explain() 辅助函数运行。

辅助方法对 mongosh 用户来说很方便,但它们返回的信息级别可能与数据库命令不同。如果不追求方便或需要额外的返回字段,请使用数据库命令。

注意

使用 explain 会忽略所有现有的计划缓存条目,并防止 MongoDB 查询计划器创建新的计划缓存条目。

此命令可用于以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

注意

所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令。

要使用 explain,您必须有权运行根本的命令。

该命令具有以下语法:

db.runCommand( { explain: <command>, verbosity: <string>, comment: <any> })

该命令接受以下字段:

字段
类型
说明

explain

文档

指定要返回其执行信息的命令的文档。有关特定命令文档的详细信息,请参阅 aggregate、count、distinct、find、findAndModify、delete、mapReduce 和 update。

verbosity

字符串

可选。一个字符串,用于指定运行 explain 的模式。该模式会影响 explain 的行为,并决定返回的信息量。

可能的模式:

  • "queryPlanner"

  • "executionStats"

  • "allPlansExecution" (默认)

有关模式的更多信息,请参阅解释行为。

comment

any

可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:

注释可以是任何有效的 BSON 类型(字符串、整型、对象、数组等)。

如果您指定 explain 而不指定 comment,它将继承指定给 explain 命令中的任何 comment。

注意

explain 和 db.collection.explain() 的默认详细程度不同。explain 默认为 allPlansExecution,而 db.collection.explain() 默认为 queryPlanner。

explain 的行为和返回的信息量取决于 verbosity 模式。

MongoDB 运行查询优化器,以便为正在接受评估的操作选择优胜计划。explain 将返回已评估的 <command> 的 queryPlanner 信息。

对于写入操作,explain 命令会返回将要执行的写入操作的相关信息,但不会实际修改数据库。

在版本 9.0 中进行了更改:

如果您在分片集群上针对不存在的数据库解释写入操作,该操作不会创建该数据库。

稳定的 API 版本 1 支持 explain 命令的以下详细模式:

警告

MongoDB 不保证 explain 命令采用任何特定的输出格式,即使在使用 Stable API 时也是如此。

对于包含 $out 阶段的 aggregation pipeline ,不能在 executionStats 模式或 allPlansExecution 模式下运行 explain 命令/db.collection.explain()。相反,您可以:

  • 在 queryPlanner 模式下运行 explain,或者

  • 在 executionStats模式或 allPlansExecution 模式下运行解释,但排除 $out 阶段,以返回 $out 阶段之前的阶段信息。

explain 操作可以返回以下信息:

  • explainVersion,输出格式版本(例如 "1")。

  • command,其中详细说明了要解释的命令。

  • queryShapeHash,从MongoDB 8.0 开始,是一个十六进制 string,具有查询结构的哈希值。有关详情,请参阅查询结构、查询结构哈希和 explain.queryShapeHash。

  • queryPlanner,其详细说明了查询优化器选择的计划,并列出了被拒绝的计划。

  • executionStats,其中详细说明了获胜计划的执行情况以及被拒计划。

  • serverInfo,提供有关 MongoDB 实例的信息。

  • serverParameters,其中详细说明了内部参数。

详细模式(例如 queryPlanner、executionStats、allPlansExecution )决定了结果是否包括 executionStats,以及 executionStats 是否包括计划选择期间捕获的数据。

解释输出会受到 BSON 文档的最大嵌套深度的限制,即 100 级嵌套。解释超出限制的输出会被截断。

有关输出的详细信息,请参阅解释结果。

以下 explain 命令在 "queryPlanner" 详细模式下运行,以返回 count 命令的查询计划信息:

db.runCommand( { explain: { count: "movies", query: { year: { $gt: 2000 } } }, verbosity: "queryPlanner" })

以下 explain 操作在 "executionStats" 详细模式下运行,以返回 count 命令的查询计划和执行信息:

db.runCommand( { explain: { count: "movies", query: { year: { $gt: 2000 } } }, verbosity: "executionStats" })

默认情况下,explain 以 "allPlansExecution" 详细模式运行。以下 explain 命令返回 update 命令的所有考虑计划的 queryPlanner 和 executionStats:

注意

执行该解释不会修改数据,但会运行更新操作的查询谓词。对于候选计划,MongoDB 会返回在计划选择阶段捕获的执行信息。

db.runCommand( { explain: { update: "movies", updates: [ { q: { year: 2000, rated: "PG" }, u: { $set: { available: true } } } ] } })
获得技能徽章

免费掌握“查询优化”!

了解详情

给本页内容打分