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来指定可尾光标。