cursor.explain()
定義
cursor.explain(verbosity)
重要
mongosh メソッド
このページでは、
mongosh
メソッドが文書化されます。これは Node.js などの言語固有のドライバーのドキュメントではありません。MongoDB API ドライバーについては、各言語の MongoDB ドライバー ドキュメントを参照してください。
db.collection.find()
メソッドのクエリプランに関する情報を提供します。explain()
メソッドの形式は次のとおりです。db.collection.find().explain() explain()
メソッドには次のパラメーターがあります。Parameter必要性タイプ説明verbose
任意文字列explain の出力に含める情報の量を決定します。使用可能な冗長モードは次のとおりです。
allPlansExecution
executionStats
queryPlanner
(デフォルト)
以前のバージョンの
explain()
との下位互換性のため、 MongoDBはtrue
をallPlansExecution
として、false
をqueryPlanner
として解釈します。このモードについて詳しくは、「冗長モード」を参照してください。
explain()
メソッドは、クエリプランと、オプションで実行統計を含むドキュメントを返します。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
注意
このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
動作
注意
explain
を使用すると、既存のすべてのプラン キャッシュ エントリが無視され、MongoDB クエリ プランナーが新しいプラン キャッシュ エントリを作成できなくなります。
冗長モード
cursor.explain()
の動作と返される情報の量は、 verbosity
モードによって異なります。
queryPlanner
モード
デフォルトでは、 cursor.explain()
はqueryPlanner
の冗長モードで実行されます。
MongoDB はクエリオプティマイザを実行して、評価中の操作に最適なプランを選択します。 cursor.explain()
は評価されたメソッドのqueryPlanner
情報を返します。
executionStats
モード
MongoDB では、クエリ オプティマイザーが実行され、勝利プランが選択され、勝利プランが完了まで実行され、勝利プランの実行を説明する統計が返されます。
cursor.explain()
は評価されたメソッドのqueryPlanner
とexecutionStats
情報を返します。 ただし、 executionStats
では拒否されたプランのクエリ実行情報は提供されません。
allPlansExecution
モード
また、クエリ オプティマイザーが実行されて最適なプランが選択され、そのプランは完了まで実行されます。"allPlansExecution"
モードでは、MongoDBにより、勝利したプランの実行を説明する統計情報と、プランの選択中に取得された他の候補プランの統計情報が返されます。
cursor.explain()
は評価されたメソッドのqueryPlanner
とexecutionStats
情報を返します。 executionStats
には、 選出されたプランの完了したクエリ実行情報が含まれます。
クエリオプティマイザが複数のプランを考慮した場合、executionStats
情報には、選択された候補プランと拒否された候補プランの両方について、 プラン選択フェーズ中にキャプチャされ た部分的な実行情報も含まれます。
db.collection.explain().find()
db.collection.explain().find()
はdb.collection.find().explain()
と似ていますが、次の重要な違いがあります。
db.collection.explain().find()
構造により、クエリ修飾子の追加の連鎖が可能になります。Fクエリ修飾子のリストについては、db.collection.explain().find().help() を参照してください。db.collection.find().explain()
はカーソルを返します。このカーソルにが の結果を返すには、explain()
.next()
またはそのエイリアス.finish()
を呼び出す必要があります。mongosh
で対話的に実行すると、mongosh
は自動的に.finish()
を呼び出し、結果を返します。 ただし、スクリプトの場合、結果を返すためには.next()
または.finish()
を明示的に呼び出す必要があります。 カーソル関連のメソッドのリストについては、 db.collection.explain().find().help(). を参照してください。
詳しくは db.collection.explain()
を参照してください。
出力
cursor.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 の結果を参照してください。
例
次の例では、 cursor.explain()
を"executionStats"冗長モードで実行し、指定されたdb.collection.find()
操作のクエリ計画と実行情報を返します。
db.products.find( { quantity: { $gt: 50 }, category: "apparel" } ).explain("executionStats")