Instructs the server to avoid closing a cursor automatically after a period of inactivity.
noCursorTimeout()method has the following prototype form:
Starting in MongoDB 3.6, MongoDB drivers and the
mongo shell 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 the
mongo shell creates an implicit session and associates it with the operation.
If a session is idle for longer than 30 minutes, the MongoDB server marks that session as expired and may close it at any time. When the MongoDB server closes the session, it also kills any in-progress operations and open cursors associated with the session. This includes cursors configured with
noCursorTimeout or a
maxTimeMS greater than 30 minutes.
Consider an application that issues a
cursor.noCursorTimeout. The server returns a cursor along with a batch of documents defined by the
cursor.batchSize() of the
find(). The session refreshes each time the application requests a new batch of documents from the server. However, if the application takes longer than 30 minutes to process the current batch of documents, the session is marked as expired and closed. When the server closes the session, it also kills the cursor despite the cursor being configured with
noCursorTimeout. When the application requests the next batch of documents, the server returns an error.
For operations that return a cursor, if the cursor may be idle for longer than 30 minutes, issue the operation within an explicit session using
Session.startSession() and periodically refresh the session using the
refreshSessions command. For example:
In the example operation, the
db.collection.find() method is associated with an explicit session. The cursor is configured with
cursor.noCursorTimeout() to prevent the server from closing the cursor if idle. The
while loop includes a block that uses
refreshSessions to refresh the session every 5 minutes. Since the session will never exceed the 30 minute idle timeout, the cursor can remain open indefinitely.
For MongoDB drivers, defer to the driver documentation for instructions and syntax for creating sessions.