Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

解释

在此页面上

  • 定义
  • 兼容性
  • 必需的访问权限
  • 语法
  • 命令字段
  • 行为
  • 输出
  • 示例
explain

explain 命令提供以下命令的执行信息:aggregatecountdistinctfindfindAndModifydeletemapReduceupdate

提示

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

文档

指定要返回其执行信息的命令的文档。有关特定命令文档的详细信息,请参阅 aggregatecountdistinctfindfindAndModifydeletemapReduceupdate

verbosity

字符串

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

可能的模式:

  • "queryPlanner"

  • "executionStats"

  • "allPlansExecution" (默认)

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

comment

any

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

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

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

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

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

MongoDB 运行查询优化器来选择获胜计划并执行获胜计划直至完成,并返回描述获胜计划执行情况的统计信息。

对于写入操作,explain 会返回有关执行的更新或删除操作的信息,但不会将修改应用到数据库中。

explain 返回已评估的 <command>queryPlannerexecutionStats 信息。但是,executionStats 并未提供被拒绝计划的查询执行信息。

默认情况下,explain"allPlansExecution" 详细模式运行。

MongoDB 运行查询优化器来选择优胜计划并执行该计划直至完成。在 "allPlansExecution" 模式下,MongoDB 返回描述优胜计划执行情况的统计信息以及在计划选择期间捕获的其他候选计划的统计信息。

对于写入操作,explain 会返回有关执行的更新或删除操作的信息,但不会将修改应用到数据库中。

explain 返回已评估的 <command>queryPlannerexecutionStats 信息。executionStats 包含优胜计划已完成查询执行信息。

如果查询优化器考虑了多个计划,executionStats 信息则还包括在计划选择阶段为获胜和被拒计划收集的部分执行信息。

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

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

警告

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

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

  • queryPlanner 模式下运行 explain,或者

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

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

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

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

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

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

db.runCommand(
{
explain: { count: "products", query: { quantity: { $gt: 50 } } },
verbosity: "queryPlanner"
}
)

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

db.runCommand(
{
explain: { count: "products", query: { quantity: { $gt: 50 } } },
verbosity: "executionStats"
}
)

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

注意

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

db.runCommand(
{
explain: {
update: "products",
updates: [
{
q: { quantity: 1057, category: "apparel" },
u: { $set: { reorder: true } }
}
]
}
}
)

后退

dbStats