定義
explainexplainコマンドは、次のコマンドの実行に関する情報を提供します:aggregate、count、 、distinct、 、 、findfindAndModifydelete、mapReduceupdate。Tip
mongoshでは、このコマンドはdb.collection.explain()およびcursor.explain()ヘルパー メソッドを通じて実行することもできます。ヘルパー メソッドは
mongoshユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
注意
このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
このコマンドの構文は、次のとおりです。
{ explain: <command>, verbosity: <string>, comment: <any> }
コマンドフィールド
このコマンドは、次のフィールドを使用します。
フィールド | タイプ | 説明 |
|---|---|---|
| ドキュメント | 実行情報を返すコマンドを指定するドキュメント。特定のコマンドドキュメントの詳細については、 |
| string | 任意。 を実行するモードを指定する 使用可能なモードは次のとおりです。
モードの詳細については、 explain の動作 を参照してください。 |
| any | 任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。
コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。
|
動作
冗長モード
explainの動作と返される情報の量は、 verbosityモードによって異なります。
MongoDB はクエリオプティマイザを実行して、評価中の操作に最適なプランを選択します。explain は評価された <command> の queryPlanner 情報を返します。
MongoDB では、クエリ オプティマイザーが実行され、勝利プランが選択され、勝利プランが完了まで実行され、勝利プランの実行を説明する統計が返されます。
書込み操作の場合、 explainは実行されるアップデート操作または削除操作に関する情報を返しますが、変更はデータベースに適用されません。
explain は評価された <command> の queryPlanner と executionStats 情報を返します。ただし、 executionStats拒否されたプランのクエリ実行情報を提供しません。
Explain 操作と Write 操作
書込み (write) 操作の場合、explain コマンドは実行される書込み (write) 操作に関する情報を返しますが、実際にはデータベースを変更しません。
Stable API
Stable API V1 は、explain コマンドに対して次の冗長モードをサポートしています。
警告
MongoDB では、Stable API を使用する場合でも、 explainコマンドからの特定の出力形式は保証されません。
制限事項
$out ステージを含む aggregation pipeline に対して、explain コマンド /db.collection.explain() を executionStats モードまたは allPlansExecution モードで実行することはできません。代わりに、次のいずれかを実行できます。
出力
explain 操作は、次の情報を返す場合があります。
explainVersion、出力形式のバージョン(例:"1")command、説明されているコマンドの詳細が表示されます。queryPlannerは、クエリオプティマイザによって選択されたプランの詳細を示し、拒否されたプランを一覧で表示します。executionStats、当選したプランと拒否されたプランの実行の詳細が表示されますserverInfo、MongoDB インスタンスに関する情報を提供しますおよびserverParameters内部パラメータの詳細が表示されます。
冗長モード(つまり、queryPlanner 、 executionStats 、 allPlansExecution)は、結果にexecutionStatsが含まれるかどうか、およびexecutionStatsにプラン選択中にキャプチャされたデータが含まれるかどうかを決定します。
出力の詳細については explain の結果を参照してください。
例
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 と を返します。
注意
この explain を実行してもデータは変更されませんが、アップデート操作のクエリ述語が実行されます。候補プランの場合、MongoDB ではプラン選択フェーズ中に取得された実行情報が返されます。
db.runCommand( { explain: { update: "products", updates: [ { q: { quantity: 1057, category: "apparel" }, u: { $set: { reorder: true } } } ] } } )