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

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

cursor.maxTimeMS(<time limit>)

重要

mongosh メソッド

This page documents a mongosh method. This is not the documentation for a language-specific driver, such as Node.js.

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

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

The maxTimeMS() method has the following prototype form:

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

The maxTimeMS() method has the following parameter:

Parameter
タイプ
説明

milliseconds

integer

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

重要

maxTimeMS() is not related to the NoCursorTimeout query flag. maxTimeMS() relates to processing time, while NoCursorTimeout relates to idle time. A cursor's idle time does not contribute towards its processing time.

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

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

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

注意

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

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

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

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

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

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

MongoDB drivers and mongosh associate all operations with a server session, with the exception of unacknowledged write operations. For operations not explicitly associated with a session (i.e. using Mongo.startSession()), MongoDB drivers and mongosh create an implicit session and associate it with the operation.

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

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

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