updateMany()(批量更新)

最后更新:2026-10-09

updateMany()(批量更新)

updateMany()更新集合中所有匹配过滤条件的文档,例如`db.users.updateMany({ age: { $lt: 18 } }, { $set: { isTeen: true } })`。与updateOne()只改第一条不同,它对每一条匹配文档都执行更新操作。适合批量修改状态、批量加字段等场景。返回结果中的matchedCount表示匹配数,modifiedCount表示实际内容被修改的数量。

分类写入
MongoDB 版本1.0+
示例语言mongosh (Shell)

📝 语法

db.<集合>.updateMany(<过滤条件>, <更新操作>, { upsert: <bool> })

⚙️ 参数

过滤条件匹配文档的条件对象,支持查询操作符。
更新操作更新操作符组成的对象,作用于所有匹配文档。
upsert可选。无匹配时插入一条新文档,默认false。

返回值:UpdateResult对象:{ acknowledged, matchedCount, modifiedCount, upsertedId }。

▶ 示例

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

// updateMany:把年龄大于30的所有用户标记为老用户
db.users.updateMany(
  { age: { $gt: 30 } },
  { $set: { isSenior: true } }
)

运行结果:

{ acknowledged: true, matchedCount: 3, modifiedCount: 3, upsertedId: null }

📌 注意事项

📚 相关教程

❓ 常见问题

QupdateMany会更新所有匹配文档吗?
A是的,所有匹配过滤条件的文档都会被更新。如果传空条件{},集合内全部文档都会被更新,务必谨慎。
QupdateMany和updateOne有什么区别?
AupdateOne()只更新第一条匹配文档,updateMany()更新所有匹配文档。需要批量修改时用updateMany()。
Q为什么updateMany返回的modifiedCount比matchedCount小?
A因为部分匹配文档的字段值已经和目标值相同,MongoDB认为内容未变化,不会计入modifiedCount。
Web-Tutorial.com

Web-Tutorial 技术团队

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

100%

🙏 帮我们做得更好

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

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