noCursorTimeout()(禁止游标超时)
最后更新:2026-10-09
noCursorTimeout()(禁止游标超时)
noCursorTimeout()禁用游标的服务器端闲置超时,语法为`db.users.find().noCursorTimeout()`。默认游标闲置超过10分钟会被服务器清理,启用后游标可长期保持,适合慢速消费大批量数据的批处理任务。注意:长期不关闭的游标会占用服务器资源,用完务必手动close(),避免游标泄漏。
| 分类 | 游标 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.find(<条件>).noCursorTimeout()
返回值:禁用超时后的游标(可继续链式调用)。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// noCursorTimeout:长时间遍历大集合
const cursor = db.logs.find().noCursorTimeout().batchSize(100)
cursor.forEach(doc => processDoc(doc))
cursor.close()
运行结果:
(遍历完成,无输出)
📌 注意事项
- 默认10分钟闲置超时,noCursorTimeout()可取消
- 长时间游标占用服务器内存,用完必须close()
- 建议配合batchSize()控制批大小
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q游标默认多久超时?
A服务器默认在游标闲置10分钟后回收,noCursorTimeout()可以禁用这个机制。
Q用了noCursorTimeout要注意什么?
A必须确保遍历完或提前手动close()游标,否则服务器资源会被长期占用造成泄漏。
Q什么时候需要noCursorTimeout?
A批处理遍历耗时可能超过10分钟的慢速大任务,例如逐条清洗上百万条文档。