用例
find()和aggregate() 方法返回包含批处理结果的游标。手动迭代游标或使用toArray() 访问权限文档。有关详细信息,请参阅在 mongosh中迭代游标。
行为
在以下情况下, MongoDB会关闭在客户端会话中创建的游标:
客户端耗尽游标。
您可以手动关闭游标。
您手动终止会话。
会话超时。
cursorTimeoutMillis设置空闲游标的超时时间(默认:10 分钟)。在此时间之后, MongoDB会关闭会话外的空闲游标。返回批处理可延长超时时间。使用killCursors 手动关闭游标。
localLogicalSessionTimeoutMinutes设置会话超时(默认:30 分钟)。使用refreshSessions 延长会话,使用killSessions 结束会话。
驱动程序和mongosh 会为在显式会话之外打开的游标创建隐式会话。
使用游标时的并发更新
当游标返回文档时,其他操作可能会在背景运行并影响结果,具体取决于读关注(read concern)级别。 有关详细信息,请参阅读取隔离性、一致性和新近度。
不存在的mongos 数据库的游标结果
从 MongoDB 7.2 开始,尝试在mongos部署上使用不存在的数据库的聚合管道查询会返回验证错误。
在以前的版本中,这些聚合查询返回空游标。
开始体验
详情
find执行aggregate 和 操作,直到填满一个批处理。然后查询暂停。此暂停的查询是一个游标,由游标ID标识。
数据库会返回批处理和游标ID。驱动程序和mongosh 会将其存储在客户端游标中。如果存在更多文档,游标将通过getMore 检索下批处理。使用cursor.objsLeftInBatch() 检查剩余的批处理结果,然后使用cursor.hasNext() 检查更多结果。
游标批处理
游标分批返回结果,但受到16 MiB 最大BSON文档大小的限制。使用 cursor.batchSize()find()aggregate()101设立文档限制。 和getMore 默认批处理大小为 。后续的 操作没有默认限制,只有16 MiB 消息大小。
排序
使用不带索引的排序操作的查询必须将所有文档加载到内存中,然后才能返回结果。
游标信息
db.serverStatus()在metrics.cursor 字段中返回游标指标。请参阅metrics.cursor 。