MongoDB提供下列方法用于更新一个集合
![d04acc36750de57d4fa297995a29c55b.png](https://i-blog.csdnimg.cn/blog_migrate/fba37b65fda2f6ecf544d0042ed419ae.jpeg)
上述方法接受以下参数:
- 过滤器文档,确定要更新哪些文档。这些过滤器与查询操作中使用的过滤器有相同的句法规则。
- 查询过滤器文档,使用表达式:指定相等条件,找出
所有字段的值为的文档:{ : , ... }
- 查询过滤器文档,可使用查询操作符指定条件:
{ : { : }, ... }
- 指定了更新内容的更新文档;或一个替换的文档,替换掉匹配到的文档而保持_id字段不变。
- 一个选项文档。
1 行为
原子性
MongoDB 中写操作在单文档级别具有原子性。
_id字段
文档一旦创建,_id字段值就固定了,不能被更新,也不能用一个_id字段值与原文档不同的文档来替换原文档。
文档大小
当执行更新操作时,导致文档变大并超出已分配的大小时,更新操作会在磁盘上重新定位文件。
字段顺序
MongoDB 保持字段写入时的顺序,除非遇到下列情况:
- _id字段总是处在首位。
- 更新的时候对某一个或某些字段重命名可能导致字段顺序变更
2.6版本中的变化:从2.6版本开始,MongoDB 尽可能地保持字段写入时的顺序,但之前的版本并不是这样的。
Upsert 选项
如果db.collection.update(), db.collection.updateOne(), db.collection.updateMany(), 或者db.collection.replaceOne()包括“upsert : true”并且使用指定的过滤器没有匹配到任何文档,那么此操作将会创建一个新文档并插入数据库。如果匹配到文档,那么此操作将修改或者替换匹配到的一个或多个文档。
2示例集合
本页的例子在mongo shell中使用db.collection.find() 方法。在mongo shell中,如果没有将游标赋给一个var类型的变量,那么游标将会自动迭代20次以打印结果集中的前20个文档。
在mongo shell中执行下面的语句,将数据灌入users 集合。
db.users.insertMany( [ { _id: 1, name: "sue