Docs 菜单

Docs 主页开发应用程序MongoDB Manual

解释

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 行为
  • 输出
  • 举例
explain

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

提示

mongosh中,该命令还可以通过db.collection.explain()cursor.explain()辅助方法运行。

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

注意

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

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

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

注意

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

该命令具有以下语法:

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

该命令接受以下字段:

字段
类型
说明
explain
文档
指定要返回其执行信息的命令的文档。有关特定命令文档的详细信息,请参阅 aggregatecountdistinctfindfindAndModifydeletemapReduceupdate
verbosity
字符串

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

可能的模式:

  • "queryPlanner"

  • "executionStats"

  • "allPlansExecution" (默认)

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

comment
注意到

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

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

注意

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

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

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

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

警告

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

从 MongoDB4 开始。2 ,您无法在explain db.collection.explain()executionStats模式或allPlansExecution 模式下为包含 阶段的 运行aggregation pipeline $out命令/ 。相反,您可以:

  • queryPlanner 模式下运行 explain,或者

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

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

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

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

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

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

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

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

详细模式(例如 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 命令会返回 命令的所有考虑计划的 和queryPlanner executionStatsupdate

注意

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

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