Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

db.collection.explain()

項目一覧

  • 説明
  • 互換性
  • 必要なアクセス権
  • 動作
  • 出力

MongoDB とドライバー

このページでは、 mongosh メソッドについて説明します。MongoDB ドライバーで同等のメソッドを確認するには、ご使用のプログラミング言語の対応するページを参照してください。

C#Java SyncNode.jsPyMongoCC++GoJava RSKotlin CoroutineKotlin SyncPHPMongoidRustScala
db.collection.explain()

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

  • aggregate()

  • count()

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

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

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

たとえば、

db.products.explain().remove( { category: "apparel" }, { justOne: true } )

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

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

Parameter
タイプ
説明

verbosity

string

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

  • "queryPlanner" (デフォルト)

  • "executionStats"

  • "allPlansExecution"

以前のバージョンの cursor.explain() との下位互換性のため、MongoDB は true"allPlansExecution" として、false"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情報を返します。

MongoDB では、クエリ オプティマイザーが実行され、勝利プランが選択され、勝利プランが完了まで実行され、勝利プランの実行を説明する統計が返されます。

書込み操作の場合、 db.collection.explain()は実行されるアップデート操作または削除操作に関する情報を返しますが、変更はデータベースに適用されませ

db.collection.explain()は評価されたメソッドのqueryPlannerexecutionStats情報を返します。 ただし、 executionStatsでは拒否されたプランのクエリ実行情報は提供されません。

また、クエリ オプティマイザーが実行されて最適なプランが選択され、そのプランは完了まで実行されます。"allPlansExecution" モードでは、MongoDBにより、勝利したプランの実行を説明する統計情報と、プランの選択中に取得された他の候補プランの統計情報が返されます。

書込み操作の場合、 db.collection.explain()は実行されるアップデート操作または削除操作に関する情報を返しますが、変更はデータベースに適用されませ

db.collection.explain()は評価されたメソッドのqueryPlannerexecutionStats情報を返します。 executionStatsには、 選出されたプラン完了したクエリ実行情報が含まれます。

クエリオプティマイザが複数のプランを考慮した場合、executionStats 情報には、選択された候補プランと拒否された候補プランの両方について、 プラン選択フェーズ中にキャプチャされ た部分的な実行情報も含まれます。

書込み(write)操作の場合、db.collection.explain() は実行される書込み(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()を修飾子で説明する」を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

db.products.explain().count( { quantity: { $gt: 50 } } )

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

db.products.explain("executionStats").find(
{ quantity: { $gt: 50 }, category: "apparel" }
)

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

注意

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

db.products.explain( "allPlansExecution" ).findAndModify( {
query: { name: "Tom", state: "active", rating: { $gt: 10 } },
sort: { rating: 1 },
update: { $inc: { score: 1 } }
} )

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

db.products.explain("executionStats").find(
{ quantity: { $gt: 50 }, category: "apparel" }
).sort( { quantity: -1 } ).hint( { category: 1, quantity: -1 } )

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

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

db.collection.explain().find()は explain の結果へのカーソルを返します。 mongoshで対話的に実行すると、 mongosh.next()メソッドを使用してカーソルを自動的に反復します。 ただし、スクリプトの場合、結果を返すには.next() (またはそのエイリアス.finish() )を明示的に呼び出す必要があります。

var explainResult = db.products.explain().find( { category: "apparel" } ).next();

戻る

db.collection.estimatedDocumentCount