AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

db. コレクション.explain()(mongoshメソッド)

MongoDB とドライバー

このページでは、mongosh メソッドのドキュメントについて記載しています。MongoDB ドライバーで同等のメソッドを確認するには、ご使用のプログラミング言語の対応するページを参照してください。
db.collection.explain()

次のメソッドのクエリ プランに関する情報を返します。

mapReduce()に関する情報を返します。

db.collection.explain()を使用するには、前述のメソッドのいずれかをdb.collection.explain()に追加します。

db.collection.explain().<method(...)>

たとえば、

db.movies.explain().remove( { rated: "PG" }, { justOne: true } )

その他の例については、「例」を参照してください。 db.collection.explain().help() も参照してください。

db.collection.explain()メソッドには次のパラメーターがあります。

Parameter
タイプ
説明

verbosity

string

任意。 explain 出力の冗長モードを指定します。 モードは explain() の動作に影響し、返される情報の量を決定します。 使用可能なモードは次のとおりです。

  • "queryPlanner" (デフォルト)

  • "executionStats"

  • "allPlansExecution"

以前のバージョンの cursor.explain() との下位互換性のため、MongoDB は true を "allPlansExecution" として、false を "queryPlanner" として解釈します。

このモードについて詳しくは、「冗長モード」を参照してください。

注意

db.collection.explain() explainコマンドはデフォルトでallPlansExecutionになりますが、このコマンドはデフォルトでqueryPlannerになります。

このメソッドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

注意

このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

explain を使用するには、基礎のコマンドを実行する権限が必要です。

注意

explainを使用すると、既存のすべてのプラン キャッシュ エントリが無視され、MongoDB クエリ プランナーが新しいプラン キャッシュ エントリを作成できなくなります。

db.collection.explain()の動作と返される情報の量は、 verbosityモードによって異なります。

デフォルトでは、 db.collection.explain()はqueryPlannerの冗長モードで実行されます。

MongoDB はクエリオプティマイザを実行して、評価中の操作に最適なプランを選択します。 db.collection.explain()は評価されたメソッドのqueryPlanner情報を返します。

書込み(write)操作の場合、db.collection.explain() は実行される書込み(write)操作に関する情報を返しますが、実際にはデータベースを変更しません。

バージョン9.0での変更:

シャーディングされたクラスター上に存在しないデータベースに対して書き込み (write) 操作を説明する場合、その操作によってデータベースが作成されることはありません。

$out ステージを含む aggregation pipeline に対して、explain コマンド/db.collection.explain() を executionStats モードまたは allPlansExecution モードで実行することはできません。代わりに、次のいずれかを実行できます。

  • queryPlanner モードで explain を実行するか、

  • executionStats モード、または allPlansExecution モードで、$out ステージなしでexplain を実行すると、$out ステージに先行するステージの情報が返されます。

db.collection.explain()メソッドはexplainコマンドをラップし、 explainを実行するための推奨方法です。

db.collection.explain().find()はdb.collection.find().explain()と似ていますが、次の重要な違いがあります。

db.collection.explain().aggregate() は、explain オプションを db.collection.aggregate() メソッドに渡すことと同じです。

db.collection.explain()でサポートされている操作のリストを表示するには、次のコマンドを実行します。

db.collection.explain().help()

db.collection.explain().find() はカーソルを返します。これにより、クエリ修飾子の連鎖が可能になります。db.collection.explain().find() でサポートされているクエリ修飾子とカーソル関連のメソッドのリストを表示するには、次のコマンドを実行します。

db.collection.explain().find().help()

db.collection.explain().find() には複数の修飾子を連鎖させることができます。例については、「find()を修飾子で説明する」を参照してください。

バージョン8.3の新機能。

シャーディングされたクラスターに存在しないデータベースに対して db.collection.explain() を実行すると、実行ステージはストリームの終端に達し、操作データベースは作成されません。ストリームの終端の実行統計の詳細については、explain.executionStats.executionStages.isEOF を参照してください。

db.collection.explain() 操作は、次の情報を返す場合があります。

  • explainVersion、出力形式のバージョン("1" など)。

  • command、説明されているコマンドの詳細が表示されます。

  • queryShapeHash は、MongoDB 8.0 以降、クエリシェイプのハッシュを持つ 16 進数文字列です。詳細については、「クエリシェイプ」「クエリシェイプハッシュ」および explain.queryShapeHash を参照してください。

  • queryPlanner は、クエリオプティマイザによって選択されたプランの詳細を示し、拒否されたプランを一覧で表示します。

  • executionStats、当選したプランと拒否されたプランの実行の詳細が表示されます。

  • serverInfo、MongoDB インスタンスに関する情報を提供します。

  • serverParameters内部パラメータの詳細が表示されます。

冗長モード(つまり、queryPlanner 、 executionStats 、 allPlansExecution)は、結果にexecutionStatsが含まれるかどうか、およびexecutionStatsにプラン選択中にキャプチャされたデータが含まれるかどうかを決定します。

Explain の出力は、 BSON ドキュメントの最大ネスト深度(100 レベルのネスト)によって制限されます。制限を超える出力は切り捨てられます。

出力の詳細については explain の結果を参照してください。

デフォルトでは、 db.collection.explain()は"queryPlanner"の冗長モードで実行されます。

次の例では、 db.collection.explain()を"queryPlanner"冗長モードで実行し、指定されたcount()操作のクエリ計画情報を返します。

db.movies.explain().count( { year: { $gt: 2000 } } )

次の例では、 db.collection.explain()を"executionStats"冗長モードで実行し、指定されたfind()操作のクエリ計画と実行情報を返します。

db.movies.explain("executionStats").find( { year: { $gt: 2000 }, rated: "PG" })

次の例では、 db.collection.explain()を"allPlansExecution"の冗長モードで実行しています。 db.collection.explain()は、指定された 操作に対して検討されたすべてのプランのqueryPlannerexecutionStats findAndModify()と を返します。

注意

この explain を実行してもデータは変更されませんが、アップデート操作のクエリ述語が実行されます。候補プランの場合、MongoDB ではプラン選択フェーズ中に取得された実行情報が返されます。

db.movies.explain( "allPlansExecution" ).findAndModify( { query: { rated: "PG", year: { $gt: 2000 } }, sort: { year: 1 }, update: { $inc: { "imdb.votes": 1 } }} )

db.collection.explain().find()構造により、クエリ修飾子の連鎖が可能になります。 たとえば、次の操作では、find() sort()}hint() クエリ修飾子と クエリ修飾子を持つ メソッドに関する情報が提供されます。

db.movies.explain("executionStats").find( { year: { $gt: 2000 }, rated: "PG" }).sort( { year: -1 } ).hint( { rated: 1, year: -1 } )

使用可能なクエリ修飾子のリストについては、 mongoshで次のコマンドを実行します。

db.collection.explain().find().help()

db.collection.explain().find() は explain() の結果を返します。mongosh で対話的に実行する場合は、.finish() メソッドを使用してクエリプランにアクセスできます。

db.movies.explain().find( { rated: "PG" } ).finish().queryPlanner.winningPlan