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

cursor.noCursorTimeout()

項目一覧

  • 定義
  • 動作
cursor.noCursorTimeout()

重要

mongosh メソッド

これは mongoshメソッドです。 これは、 Node.jsまたはその他のプログラミング言語固有のドライバー メソッドのドキュメントではありません

ほとんどの場合、 mongoshメソッドはレガシーの mongo shell メソッドと同じように動作します。 ただし、一部のレガシー メソッドはmongoshでは利用できません。

レガシーmongo shell のドキュメントについては、対応する MongoDB Server リリースのドキュメントを参照してください。

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

非アクティブな状態が一定期間続いた後、カーソルを自動的に閉じないようサーバーへ指示します。

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

db.collection.find(<query>).noCursorTimeout()

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

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

db.collection.find()cursor.noCursorTimeout() を発行するアプリケーションを検討しましょう。サーバーは、find()cursor.batchSize() によって定義されたドキュメントのバッチとともにカーソルを返します。セッションは、アプリケーションがサーバーに新しいドキュメントのバッチをリクエストするたびに更新されます。ただし、アプリケーションが現在のドキュメントのバッチ処理に 30 分以上かかる場合には、セッションは期限切れとしてマークされ、閉じます。サーバーがセッションを閉じると、カーソルが noCursorTimeout() で設定されていたとしても、カーソルも強制終了されます。アプリケーションが次のドキュメントのバッチをリクエストすると、サーバーはエラーを返します。

カーソルを返す操作の場合、カーソルが 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.noCursorTimeout() で構成されています。while ループには、refreshSessions を使用して 5 分ごとにセッションを更新するブロックが含まれています。セッションが 30 分間のアイドルタイムアウトを超えることはないため、カーソルは無期限に開いたままになります。

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

戻る

cursor.next

項目一覧