db.collection.explain()
On this page本页内容
Description描述
db.collection.explain()- Important
mongosh Method
This page documents a
mongoshmethod. This is not the documentation for database commands or language-specific drivers, such as Node.js.For the database command, see the
explaincommand.For MongoDB API drivers, refer to the language-specific MongoDB driver documentation.
For the legacy
mongoshell documentation, refer to the documentation for the corresponding MongoDB Server release:Returns information on the query plan for the following methods:返回有关以下方法的查询计划的信息:New in version 4.4:4.4版新增:Returns information on返回有关mapReduce().mapReduce()的信息。To use要使用db.collection.explain(), append one of the aforementioned methods todb.collection.explain():db.collection.explain(),请将上述方法之一附加到db.collection.explain():db.collection.explain().<method(...)>
For example,例如db.products.explain().remove( { category: "apparel" }, { justOne: true } )
For more examples, see Examples. See also db.collection.explain().help().有关更多示例,请参阅示例。另请参阅db.collection.explain().help()。Thedb.collection.explain()method has the following parameter:db.collection.explain()方法具有以下参数:Parameter参数Type类型Description描述verbositystring Optional.可选的。Specifies the verbosity mode for the explain output.指定解释输出的详细模式。The mode affects the behavior of该模式影响explain()and determines the amount of information to return.explain()的行为,并确定要返回的信息量。The possible modes are:可能的模式有:"queryPlanner"(Default)"executionStats""allPlansExecution"
For backwards compatibility with earlier versions of为了与早期版本的cursor.explain(), MongoDB interpretstrueas"allPlansExecution"andfalseas"queryPlanner".cursor.explain()向后兼容,MongoDB将true解释为"allPlansExecution",将false解释为"queryPlanner"。
For more information on the modes, see Verbosity Modes.有关模式的详细信息,请参阅详细模式。
Behavior行为
Verbosity Modes详细模式
The behavior of db.collection.explain() and the amount of information returned depend on the verbosity mode.db.collection.explain()的行为和返回的信息量取决于verbosity模式。
By default, 默认情况下,db.collection.explain() runs in queryPlanner verbosity mode.db.collection.explain()在queryPlanner详细模式下运行。
MongoDB runs the query optimizer to choose the winning plan for the operation under evaluation. MongoDB运行查询优化器来为正在评估的操作选择获胜计划。db.collection.explain() returns the 返回已评估方法的queryPlanner information for the evaluated method.queryPlanner信息。
MongoDB runs the query optimizer to choose the winning plan, executes the winning plan to completion, and returns statistics describing the execution of the winning plan.MongoDB运行查询优化器来选择获胜计划,执行获胜计划直到完成,并返回描述获胜计划执行情况的统计信息。
For write operations, 对于写操作,db.collection.explain() returns information about the update or delete operations that would be performed, but does not apply the modifications to the database.db.collection.explain()返回有关将要执行的更新或删除操作的信息,但不将修改应用于数据库。
db.collection.explain() returns the 返回已评估方法的queryPlanner and executionStats information for the evaluated method. queryPlanner和executionStats信息。However, 但是,executionStats does not provide query execution information for the rejected plans.executionStats不提供被拒绝计划的查询执行信息。
MongoDB runs the query optimizer to choose the winning plan and executes the winning plan to completion. MongoDB运行查询优化器来选择获胜计划,并执行获胜计划直至完成。In 在"allPlansExecution" mode, MongoDB returns statistics describing the execution of the winning plan as well as statistics for the other candidate plans captured during plan selection."allPlansExecution"模式下,MongoDB返回描述获胜计划执行情况的统计信息,以及在计划选择过程中捕获的其他候选计划的统计信息。
For write operations, 对于写操作,db.collection.explain() returns information about the update or delete operations that would be performed, but does not apply the modifications to the database.db.collection.explain()返回有关将要执行的更新或删除操作的信息,但不将修改应用于数据库。
db.collection.explain() returns the 返回已评估方法的queryPlanner and executionStats information for the evaluated method. queryPlanner和executionStats信息。The executionStats includes the completed query execution information for the winning plan.executionStats包括获胜计划的已完成查询执行信息。
If the query optimizer considered more than one plan, 如果查询优化器考虑了多个计划,executionStats information also includes the partial execution information captured during the plan selection phase for both the winning and rejected candidate plans.executionStats信息还包括在计划选择阶段为获胜和被拒绝的候选计划捕获的部分执行信息。
Explain and Write Operations解释和编写操作
For write operations, 对于写操作,db.collection.explain() returns information about the write operation that would be performed but does not actually modify the database.db.collection.explain()返回有关将要执行但实际上不会修改数据库的写操作的信息。
Restrictions限制
Starting in MongoDB 4.2, you cannot run the 从MongoDB 4.2开始,对于包含explain command/db.collection.explain() in executionStats mode or allPlansExecution mode for an aggregation pipeline that contains the $out stage. $out阶段的聚合管道,不能在executionStats模式或allPlansExecution模式下运行explain命令/db.collection.explain()。Instead, you can either:相反,您可以:
run the explain in在queryPlannermode orqueryPlanner模式下运行解释,或者run the explain in在executionStatsmode orallPlansExecutionmode but without the$outstage to return information for the stages that precede the$outstage.executionStats模式或allPlansExecution模式下运行explain,但不包含$out阶段,以返回$out阶段之前的阶段的信息。
explain() Mechanics机械师
The db.collection.explain() method wraps the explain command and is the preferred way to run explain.db.collection.explain()方法包装explain命令,是运行explain的首选方法。
db.collection.explain().find() is similar to 类似于db.collection.find().explain() with the following key differences:db.collection.find().explain(),但有以下关键区别:
Thedb.collection.explain().find()construct allows for the additional chaining of query modifiers.db.collection.explain().find()构造允许额外的查询修饰符链接。For list of query modifiers, see db.collection.explain().find().help().有关查询修饰符的列表,请参阅db.collection.explain().find().help()。Thedb.collection.find().explain()returns a cursor, which requires a call to.next(), or its alias.finish(), to return theexplain()results.db.collection.find().explain()返回一个游标,该游标需要调用.next()或其别名.finish()来返回explain()结果。If run interactively in如果在mongosh,mongoshautomatically calls.finish()to return the results.mongosh中以交互方式运行,mongosh会自动调用.finish()返回结果。For scripts, however, you must explicitly call但是,对于脚本,必须显式调用.next(), or.finish(), to return the results. For list of cursor-related methods, see db.collection.explain().find().help()..next()或.finish()才能返回结果。有关游标相关方法的列表,请参阅db.collection.explain().find().help()。
db.collection.explain().aggregate() is equivalent to passing the explain option to the 相当于将db.collection.aggregate() method.explain选项传递给db.collection.aggregate()方法。
help()
To see the list of operations supported by 要查看db.collection.explain(), run:db.collection.explain()支持的操作列表,请运行:
db.collection.explain().help()
db.collection.explain().find() returns a cursor, which allows for the chaining of query modifiers. 返回一个游标,该游标允许链接查询修饰符。To see the list of query modifiers supported by 要查看db.collection.explain().find() as well as cursor-related methods, run:db.collection.explain().find()支持的查询修饰符列表以及与游标相关的方法,请运行:
db.collection.explain().find().help()
You can chain multiple modifiers to 可以将多个修饰符链接到db.collection.explain().find(). db.collection.explain().find()。For an example, see Explain 有关示例,请参阅使用修饰符解释find() with Modifiers.find()。
Output输出
db.collection.explain() operations can return information regarding:操作可以返回关于以下内容的信息:
explainVersion, the output format version (for example,,输出格式版本(例如,"1");"1");command, which details the command being explained;,详细说明了正在解释的命令;queryPlanner, which details the plan selected by the query optimizer and lists the rejected plans;,详细说明由查询优化器选择的计划,并列出被拒绝的计划;executionStats, which details the execution of the winning plan and the rejected plans;,详细说明了获胜计划和被拒绝计划的执行情况;serverInfo, which provides information on the MongoDB instance; and,提供了MongoDB实例的相关信息;和serverParameters, which details internal parameters.,详细说明了内部参数。
The verbosity mode (i.e. 详细模式(即queryPlanner, executionStats, allPlansExecution) determines whether the results include executionStats and whether executionStats includes data captured during plan selection.queryPlanner、executionStats、allPlansExecution)确定结果是否包括executionStats以及executionStats是否包括在计划选择期间捕获的数据。
Explain output is limited by the maximum Nested Depth for BSON Documents, which is 100 levels of nesting. 解释输出受到BSON文档的最大嵌套深度的限制,即100个嵌套级别。Explain output that exceeds the limit is truncated.解释超过限制的输出被截断。
For details on the output, see Explain Results.有关输出的详细信息,请参阅解释结果。
Examples实例
queryPlanner Mode模式
By default, 默认情况下,db.collection.explain() runs in "queryPlanner" verbosity mode.db.collection.explain()在"queryPlanner"详细模式下运行。
The following example runs 以下示例在db.collection.explain() in "queryPlanner" verbosity mode to return the query planning information for the specified count() operation:"queryPlanner"详细模式下运行db.collection.explain(),以返回指定count()操作的查询计划信息:
db.products.explain().count( { quantity: { $gt: 50 } } )
executionStats Mode模式
The following example runs 以下示例在db.collection.explain() in "executionStats" verbosity mode to return the query planning and execution information for the specified find() operation:"executionStats"详细模式下运行db.collection.explain(),以返回指定find()操作的查询计划和执行信息:
db.products.explain("executionStats").find(
{ quantity: { $gt: 50 }, category: "apparel" }
)
allPlansExecution Mode模式
The following example runs 以下示例在db.collection.explain() in "allPlansExecution" verbosity mode. "allPlansExecution"详细模式下运行db.collection.explain()。db.collection.explain() returns the queryPlanner and executionStats for all considered plans for the specified findAndModify() operation:db.collection.explain()为指定的findAndModify()操作返回所有考虑的计划的queryPlanner和executionStats:
The execution of this explain will not modify data but runs the query predicate of the update operation. 执行此解释不会修改数据,而是运行更新操作的查询谓词。For candidate plans, MongoDB returns the execution information captured during the plan selection phase.对于候选计划,MongoDB返回在计划选择阶段捕获的执行信息。
db.products.explain( "allPlansExecution" ).findAndModify( {
query: { name: "Tom", state: "active", rating: { $gt: 10 } },
sort: { rating: 1 },
update: { $inc: { score: 1 } }
} )
Explain find() with Modifiers用修饰符解释find()
find() with Modifiersdb.collection.explain().find() construct allows for the chaining of query modifiers. 构造允许链接查询修饰符。For example, the following operation provides information on the 例如,以下操作提供了带有find() method with sort() and hint() query modifiers.sort()和hint()查询修饰符的find()方法的信息。
db.products.explain("executionStats").find(
{ quantity: { $gt: 50 }, category: "apparel" }
).sort( { quantity: -1 } ).hint( { category: 1, quantity: -1 } )
For a list of query modifiers available, run the following in 有关可用查询修饰符的列表,请在mongosh:mongosh中运行以下命令:
db.collection.explain().find().help()
Iterate the explain().find() Return Cursor迭代explain().find()返回游标
explain().find() Return Cursordb.collection.explain().find() returns a cursor to the explain results. If run interactively in 将游标返回到解释结果。如果在mongosh, mongosh automatically iterates the cursor using the .next() method. mongosh中以交互方式运行,mongosh会使用.next()方法自动迭代游标。For scripts, however, you must explicitly call 但是,对于脚本,必须显式调用.next() (or its alias .finish()) to return the results:.next()(或其别名.finish())才能返回结果:
var explainResult = db.products.explain().find( { category: "apparel" } ).next();