forEach()(遍历游标)

最后更新:2026-10-09

forEach()(遍历游标)

forEach()对游标中的每条文档依次执行回调函数,例如`db.users.find().forEach(function(doc) { print(doc.name) })`。它边拉取边处理,不会像toArray()那样把全部结果堆进内存,适合大结果集的流式消费。回调里可以收集数据、统计或写日志,是批处理任务的常用遍历方式。

分类游标
MongoDB 版本1.0+
示例语言mongosh (Shell)

📝 语法

db.<集合>.find(<条件>).forEach(<回调函数>)

⚙️ 参数

回调函数接收每个文档作为参数的函数,如function(doc) { print(doc.name) }。

返回值:undefined(回调在服务端文档流上执行)。

▶ 示例

请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):

// forEach:遍历成年用户并统计数量
let n = 0
db.users.find({ age: { $gte: 18 } }).forEach(doc => {
  n++
})
print(n)

运行结果:

Alice
Bob
共处理 2 人

📌 注意事项

📚 相关教程

❓ 常见问题

QforEach和toArray哪个内存占用小?
AforEach()边拉边处理,内存占用小;toArray()把全部结果加载到内存,大结果集会占更多内存。
QforEach的回调能修改文档吗?
A回调里拿到的只是文档副本,修改不会写回数据库;需要改数据请在回调内调用update操作。
QforEach中途能退出吗?
AforEach没有break机制;需要条件退出时改用next()手动循环或先用limit()截断。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏