Tailable Cursors

默认情况下,当 Client 端用尽游标中的所有结果时,MongoDB 将自动关闭游标。但是,对于capped collections,您可以使用* Tailable Cursor ,该 Tailable Cursor *在 Client 端用尽初始光标中的结果之后仍保持打开状态。可尾游标在概念上等效于具有-f选项的tail Unix 命令(即“跟随”模式)。Client 将新的其他文档插入上限的集合后,可尾光标将 continue 检索文档。

在写量大但索引不实用的加盖集合上使用可结尾的游标。例如,MongoDB replication使用可尾光标来尾随主要对象oplog

Note

如果查询是在索引字段上,请不要使用可结尾的游标,而应使用常规游标。跟踪查询返回的索引字段的最后一个值。要检索新添加的文档,请使用查询条件中索引字段的最后一个值再次查询集合,如以下示例所示:

db.<collection>.find( { indexedField: { $gt: <lastvalue> } } )

请考虑以下有关可尾游标的行为:

  • 有尾游标不使用索引,而不会返回natural order中的文档。

  • 由于可尾游标不使用索引,因此查询的初始扫描可能会很昂贵。但是,在最初耗尽光标之后,后续检索新添加的文档是不昂贵的。

  • 如果以下情况之一,则有尾游标可能变为* dead *或无效:

  • 查询不返回匹配项。

    • 光标将文档返回到集合的“末尾”,然后应用程序将删除该文档。

游标的 ID 为0

有关特定于驱动程序的方法,请参见driver documentation来指定可尾光标。