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