tailable()(可追踪游标)
最后更新:2026-10-09
tailable()(可追踪游标)
tailable()把游标标记为可追踪模式,例如`db.logs.find().tailable()`。可追踪游标不会在数据耗尽时自动关闭,而是持续等待新数据,常用于tail日志和Change Stream之前监控插入数据的场景。要求集合必须是有上限的Capped集合;在副本集环境下配合awaitData选项效果更佳。
| 分类 | 游标 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.find(<条件>).tailable({ awaitData: <bool> })
⚙️ 参数
| awaitData | 可选。true时在无新数据时阻塞等待而非立即返回。 |
|---|
返回值:标记为可追踪的游标(可继续链式调用)。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// tailable:持续读取日志集合的新增记录
const cursor = db.logs.find()
.tailable({ awaitData: true })
while (cursor.hasNext()) {
print(cursor.next().msg)
}
运行结果:
login ok
order created
payment received
📌 注意事项
- 只支持Capped集合
- 数据耗尽时游标不关闭,继续等待新数据
- 新项目推荐用watch()变更流替代tailable方案
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Qtailable游标有什么用?
A用于持续读取Capped集合的新增数据,如实时日志追踪、监控数据流,数据耗尽不会自动关闭。
Qtailable有什么限制?
A只能用于Capped集合;新项目建议改用watch()变更流,功能更强且支持普通集合。
Qtailable和watch有什么区别?
Atailable()只支持Capped集合并轮询新数据;watch()基于oplog变更流,支持普通集合和更多事件类型。