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 }
📌 注意事项
- 更新所有匹配文档,谨慎使用空条件{}——会更新集合里全部文档
- modifiedCount可能小于matchedCount:内容相同也算未修改
- 大集合批量更新建议分批执行并关注性能
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
QupdateMany会更新所有匹配文档吗?
A是的,所有匹配过滤条件的文档都会被更新。如果传空条件{},集合内全部文档都会被更新,务必谨慎。
QupdateMany和updateOne有什么区别?
AupdateOne()只更新第一条匹配文档,updateMany()更新所有匹配文档。需要批量修改时用updateMany()。
Q为什么updateMany返回的modifiedCount比matchedCount小?
A因为部分匹配文档的字段值已经和目标值相同,MongoDB认为内容未变化,不会计入modifiedCount。