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

cursor.maxTimeMS()(mongoshメソッド)

cursor.maxTimeMS(<time limit>)

重要

mongosh メソッド

このページでは メソッドについて説明します。これはNode.jsなどの言語固有のドライバーのドキュメントではありませんmongosh

MongoDB API ドライバーについては、各言語の「MongoDB ドライバーのドキュメント」を参照してください。

カーソルに対する情報処理操作の累積時間制限をミリ秒単位で指定します。

maxTimeMS()メソッドのプロトタイプ形式は次のとおりです。

db.collection.find(
{ <query> },
{ <projection> }
).maxTimeMS( <milliseconds> )

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

Parameter
タイプ
説明

milliseconds

integer

カーソルに対する処理操作の累積時間制限をミリ秒単位で指定します。

重要

maxTimeMS()NoCursorTimeout クエリ フラグと関係ありません。maxTimeMS() はプロセシング時間に関連し、NoCursorTimeout はアイドル時間に関連します。カーソルのアイドル時間は、そのプロセシング時間には寄与しません。

maxAwaitTimeMS() メソッドは追尾可能 (tailable) カーソルが次の応答を待機する時間の制限を設定します。合計処理時間に制限はありません。

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

  • MongoDB Atlas はクラウドでの MongoDB 配置のための完全管理サービスです

注意

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

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

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

MongoDB は、関連付けられたカーソルが割り当てられた時間制限を超えた場合に、操作を終了の対象とします。MongoDB は、db.killOp() と同じメカニズムを使用して、割り当てられた時間制限を超えた操作を終了します。MongoDB は、指定された割り込みポイントのいずれかでのみ操作を終了します。

MongoDB は、クライアントとサーバー間のレイテンシをカーソルの時間制限にカウントしません。ただし、シャーディングされたクラスターの場合、MongoDB は mongos インスタンスと mongod インスタンス間のレイテンシをこの時間制限に含めます。

複数の結果のバッチを生成するクエリは、カーソルが割り当てられた制限時間を超えるまでバッチを返し続けます。

MongoDBドライバーとmongosh は、確認されていない書込み操作を除くすべての操作をサーバーセッションに関連付けます。セッションに明示的に関連付けられていない操作(つまり を使用するもの)の場合、Mongo.startSession() MongoDBドライバーとmongosh は暗黙的なセッションを作成し、それが操作に関連付けられます。

セッションが30 分以上アイドル状態になると、 MongoDBサーバーはそのセッションを期限切れとしてマークし、いつでも閉じる可能性があります。 MongoDBサーバーがセッションを閉じると、セッションに関連付けられている進行中の操作と開いているカーソルもすべて強制終了されます。これには、noCursorTimeout() maxTimeMS()または30 分を超える で構成されたカーソルが含まれます。

例、 がfind() maxTimeMS()分のタイムアウトに設定されている31 操作を考えてみましょう。サーバーは、cursor.batchSize()find() によって定義されたドキュメントのバッチするとともにカーソルを返します。セッションは、アプリケーションがサーバーに新しいドキュメントのバッチするをリクエストするたびに更新されます。ただし、アプリケーションが現在のドキュメントのバッチする処理に30 分以上かかる場合は、セッションは期限切れとしてマークされ、閉じます。サーバーがセッションを閉じると、カーソルは maxTimeMS()分より長く30 に設定されているにもかかわらず、カーソルも強制終了されます。アプリケーションが次のドキュメントのバッチするをリクエストすると、サーバーはエラーを返します。

カーソルを返す操作の場合、カーソルが 30 分以上アイドル状態になる可能性がある場合は、 Mongo.startSession()を使用して明示的なセッション内で操作を発行し、 refreshSessionsコマンドを使用して定期的にセッションを更新します。以下がその例です。

var session = db.getMongo().startSession()
var sessionId = session
sessionId // show the sessionId
var cursor = session.getDatabase("examples").getCollection("data").find().noCursorTimeout()
var refreshTimestamp = new Date() // take note of time at operation start
while (cursor.hasNext()) {
// Check if more than 5 minutes have passed since the last refresh
if ( (new Date()-refreshTimestamp)/1000 > 300 ) {
print("refreshing session")
db.adminCommand({"refreshSessions" : [sessionId]})
refreshTimestamp = new Date()
}
// process cursor normally
}

例操作では、db.collection.find() メソッドは明示的なセッションに関連付けられています。カーソルは、カーソルを少なくともcursor.maxTimeMS() 分間開いたままになるように31 で設定されています。while ループには、refreshSessions を使用して5 分ごとにセッションを更新するブロックが含まれています。セッションが30 分のアイドル タイムアウトを超えることはないため、カーソルは設定されたmaxTimeMS() まで開いたままにできます。

MongoDB ドライバーの場合、セッションを作成するための手順と構文については、ドライバーのドキュメントを参照してください。

MongoDB8.0 以降では、defaultMaxTimeMS クラスター パラメータを使用して、個々の読み取り操作が完了するデフォルトの時間制限を指定できます。クエリでmaxTimeMS() オプションが指定されている場合、その値はdefaultMaxTimeMS 値を上書きします。

次のクエリでは、50 ミリ秒の時間制限を指定しています。

db.collection.find({description: /August [0-9]+, 1969/}).maxTimeMS(50)
このページを評価