更新文档
更新操作用于修改集合中的现有文档,MongoDB 提供了三个更新集合中文档的方法:updateOne()
、updateMany()
和 replaceOne()
。
在 MongoDB 中,更新操作针对的是单个集合。
MongoDB 提供了更新操作符 $set
来修改字段值。
更新单个文档
使用 db.collection.updateOne()
方法可以更新集合中符合条件的第一条文档。
例子
要更新 matu.users
集合中的第一个文档,其中 name
等于 Dancy
1use matu
2
3db.users.updateOne(
4 {
5 name: "Dancy"
6 },
7 {
8 $set: {
9 age: NumberInt(30)
10 },
11 $current: {
12 lastUpdated: true
13 }
14 }
15)
更新多个文档
使用 db.collection.updateMany()
方法可以更新集合中所有符合条件的文档。
例子
要更新 matu.users
集合中所有 age
小于 30 的文档
1use matu
2
3db.users.updateOne(
4 {
5 age: {
6 $lt: 30
7 }
8 },
9 {
10 $set: {
11 gender: "boy"
12 },
13 $current: {
14 lastUpdated: true
15 }
16 }
17)
替换文档
使用 replaceOne()
方法可以用新的文档替换符合条件的第一条文档。
例子
1use users
2
3db.users.replaceOne(
4 { name: "Dancy" },
5 { name: "Dancy", age: 30, email: "codebetter@163.com" }
6)
其它
覆盖的修改
如果我们想修改_id
为 1 的记录,名称为 wangwu
1db.集合名称.updateOne({_id: "1"}, {name: "wangwu"}, options)
执行完之后,我们会发现,这条文档除了name字段,其它字段都不见了
局部修改
为了解决上面的问题,我们需要使用修改器 $set
来实现,命令如下:
1db.集合名称.updateOne({_id: "1"}, {$set:{name: "wangwu"}})
批量的修改
1db.集合名称.update({_id: "1"}, {$set:{name: "wangwu"}},{multi: true})
如果不加后面的参数 {multi: true}
,则只更新符合条件的第一条记录
列值增长的修改
如果我们想实现对某列在原有值的基础上进行增加或减少,可以使用 $inc
运算符来实现
1db.集合名称.updateOne({_id: "1"}, {$inc:{name: "wangwu"}})