Docs 菜单
Docs 主页
/
数据库手册
/ /

Cursors

游标是指向查询结果的指针。游标允许一次一批批处理迭代数据库结果。

当您使用 mongosh驾驶员执行 find()aggregate() 方法时,它们会返回一个包含批处理结果的游标。您可以通过手动迭代游标或使用 toArray() 方法访问权限结果文档。有关更多信息,请参阅mongosh 中迭代游标。

如果要访问固定大小集合,则可以使用可追加游标,在新文档插入到集合中时对其进行检索。有关详细信息,请参阅可追加游标。

客户端会话中创建的游标将在以下情况下关闭:

  • 客户端耗尽游标。

  • 用户手动关闭游标。

  • 空闲游标超过超时时间。

  • 用户手动终止会话。

  • 会话超时。

空闲游标超时由 cursorTimeoutMillis 参数指定,默认值为 10 分钟。每次游标返回新批处理时,游标超时时间都会延长。要手动关闭游标,请使用killCursors

服务器会话超时由 localLogicalSessionTimeoutMinutes 参数指定,默认值为 30 分钟。要将会话延长到超过 30 分钟,请使用 refreshSessions 。要手动终止会话,请使用killSessions

如果在会话外打开游标, MongoDB驱动程序和 mongosh 会创建一个隐式会话并将其与操作关联起来。

当游标返回文档时,其他操作可能会在背景运行并影响结果,具体取决于读关注(read concern)级别。 有关详细信息,请参阅读取隔离性、一致性和新近度。

当您运行findaggregate 操作时,数据库会执行查询,直到找到足够的文档来填充批处理。当批处理已满时,查询会暂停。服务器上暂停的查询称为游标,与暂停的查询关联的ID是游标ID

数据库会将生成的批处理和游标ID返回给客户端。MongoDB驱动程序和 mongosh 将此数据存储在客户端游标实例中。如果在到达批处理末尾时有更多匹配文档,则客户端游标会使用 getMore 自动从服务器检索下一个批处理。要查看当前批处理中剩余多少结果,请使用 cursor.objsLeftInBatch()。要检查当前批处理中或服务器上是否有剩余结果,请使用 cursor.hasNext()

游标分批返回结果。批处理中的数据量必须小于最大BSON文档大小 (16 MiB)。要指定批处理中允许的最大文档数,请参阅 cursor.batchSize()。默认下,find()aggregate() 操作的批处理大小为 101getMore针对生成的游标发出的后续 操作没有默认批处理大小,因此它们仅受16 MB 消息大小的限制。

对于包含不带索引的排序操作的查询,服务器必须在返回任何结果之前将所有文档加载到内存中以执行排序。

db.serverStatus() 方法返回包含 metrics字段的文档。metrics字段包含一个 metrics.cursor字段,其中包含详细的游标信息。要学习;了解详情,请参阅 metrics.cursor

后退

查询计划

在此页面上