参考 > 参考 > mongo Shell方法 > 游标方法 > cursor.noCursorTimeout()
cursor.
noCursorTimeout
()¶mongo
壳法
此页面记录了mongo
shell方法,并且
没有引用MongoDB Node.js驱动程序(或任何其他驱动程序)方法。对于相应的MongoDB驱动程序API,请改为参考您特定的
MongoDB驱动程序文档。
指示服务器避免在一段时间不活动后自动关闭游标。
该noCursorTimeout()
方法具有以下原型形式:
noCursorTimeout
¶从MongoDB 3.6开始,MongoDB驱动程序和mongo
外壳程序将所有操作与服务器会话相关联,但未确认的写操作除外。对于未与会话明确关联的操作(即使用Mongo.startSession()
),MongoDB驱动程序和mongo
外壳程序会创建一个隐式会话并将其与该操作相关联。
如果会话空闲时间超过30分钟,则MongoDB服务器会将会话标记为已过期,并可以随时关闭它。当MongoDB服务器关闭会话时,它还会终止所有正在进行的操作并打开与该会话关联的游标。这包括配置了30分钟noCursorTimeout
或maxTimeMS
30分钟以上的光标。
考虑一个应用程序,它发出db.collection.find()
与cursor.noCursorTimeout
。该服务器有一批由定义的文件一起返回游标cursor.batchSize()
的find()
。每次应用程序从服务器请求新一批文档时,会话都会刷新。但是,如果应用程序花费超过30分钟的时间来处理当前批次的文档,则该会话将被标记为已过期并关闭。当服务器关闭会话时,即使使用游标配置了游标,它也会杀死游标noCursorTimeout
。当应用程序请求下一批文档时,服务器将返回错误。
对于返回游标的操作,如果游标可能闲置了30分钟以上,请在显式会话中使用发出操作,Session.startSession()
并使用refreshSessions
命令定期刷新该会话。例如:
在示例操作中,该db.collection.find()
方法与显式会话关联。游标配置
cursor.noCursorTimeout()
为防止服务器空闲时关闭游标。该while
循环包括一个块,该块用于
refreshSessions
每5分钟刷新一次会话。由于会话将永远不会超过30分钟的空闲超时,因此游标可以无限期保持打开状态。
对于MongoDB驱动程序,请参考驱动程序文档中有关创建会话的说明和语法。