更新文档

更新操作用于修改集合中的现有文档,MongoDB 提供了三个更新集合中文档的方法:updateOne()updateMany()replaceOne()

在 MongoDB 中,更新操作针对的是单个集合。

MongoDB 提供了更新操作符 $set 来修改字段值。

更新单个文档

使用 db.collection.updateOne() 方法可以更新集合中符合条件的第一条文档。

例子

要更新 matu.users 集合中的第一个文档,其中 name 等于 Dancy

  • age 字段值修改为 30
  • 记录当前修改时间
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 的文档

  • gender 改为 boy
  • 记录当前修改时间
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"}})