参考 > 参考 > mongo Shell方法 > 游标方法 > cursor.maxTimeMS()
cursor.
maxTimeMS
(<时间限制> )¶mongo
壳法
此页面记录了mongo
shell方法,并且
没有引用MongoDB Node.js驱动程序(或任何其他驱动程序)方法。对于相应的MongoDB驱动程序API,请改为参考您特定的
MongoDB驱动程序文档。
指定用于游标的处理操作的累积时间限制(以毫秒为单位)。
该maxTimeMS()
方法具有以下参数:
参数 | 类型 | 描述 |
---|---|---|
milliseconds |
整数 | 指定在光标上进行处理操作的累积时间限制(以毫秒为单位)。 |
重要
maxTimeMS()
与NoCursorTimeout
查询标志无关
。maxTimeMS()
与处理时间有关,而NoCursorTimeout
与空闲时间有关。游标的空闲时间不影响其处理时间。
如果关联的游标超过其分配的时间限制,则MongoDB将终止操作作为目标。MongoDB使用与相同的机制终止超出其分配的时间限制的操作
db.killOp()
。MongoDB仅在其指定的中断点之一处终止操作。
MongoDB不会将客户端和服务器之间的网络延迟计入游标的时间限制。但是,对于分片群集,MongoDB确实包括mongos
和
mongod
实例之间的延迟时间。
生成多批次结果的查询将继续返回批次,直到光标超过其分配的时间限制为止。
maxTimeMS
¶从MongoDB 3.6开始,MongoDB驱动程序和mongo
外壳程序将所有操作与服务器会话相关联,但未确认的写操作除外。对于未与会话明确关联的操作(即使用Mongo.startSession()
),MongoDB驱动程序和mongo
外壳程序会创建一个隐式会话并将其与该操作相关联。
如果会话空闲时间超过30分钟,则MongoDB服务器会将会话标记为已过期,并可以随时关闭它。当MongoDB服务器关闭会话时,它还会终止所有正在进行的操作并打开与该会话关联的游标。这包括配置了30分钟noCursorTimeout
或maxTimeMS
30分钟以上的光标。
例如,考虑配置为31分钟的超时的find()
操作maxTimeMS
。该服务器有一批由定义的文件一起返回游标cursor.batchSize()
的find()
。每次应用程序从服务器请求新一批文档时,会话都会刷新。但是,如果应用程序花费超过30分钟的时间来处理当前批次的文档,则该会话将被标记为已过期并关闭。当服务器关闭会话时,即使将光标配置为
maxTimeMS
超过30分钟,服务器也会杀死该光标。当应用程序请求下一批文档时,服务器将返回错误。
对于返回游标的操作,如果游标可能闲置了30分钟以上,请在显式会话中使用发出操作,Session.startSession()
并使用refreshSessions
命令定期刷新该会话。例如:
在示例操作中,该db.collection.find()
方法与显式会话关联。光标配置
cursor.maxTimeMS()
为使光标保持打开至少31分钟。该while
循环包括一个块,该块用于
refreshSessions
每5分钟刷新一次会话。由于会话永远不会超过30分钟的空闲超时,因此游标可以保持打开状态,直到配置了
maxTimeMS()
。
对于MongoDB驱动程序,请参考驱动程序文档中有关创建会话的说明和语法。
也可以看看
例
以下查询指定50毫秒的时间限制: