参数 含义
fieldName 将更新的字段 :{name: 'Tom'}
targetVaule 值将分配给字段 :{name: 'Tom'}

Section 5.1: $set 操作符更新文档中的指定字段

一、概述 MongoDB 与 RDBMS 的一个显著区别是,MongoDB 有许多种操作符。其中之一就是更新操作符,它用于更新语句中。 二、如果不使用更新操作符会发生什么? 假设我们有一个存储学生信息的学生集合(表视图):

mongo更新操作符

有一天,你接到一份工作,需要把汤姆的性别从 “男 ”改成 “女”。这很简单,对吗?于是,你根据自己在 RDBMS 方面的经验,很快写出了下面的语句:

db.student.update(
{name: 'Tom'}, // query criteria
{sex: 'F'} // update action
);

让我们看看结果如何:

mongo更新操作符

我们丢失了汤姆的年龄和姓名!从这个例子中,我们可以知道,如果 update 语句中没有任何 update 操作符,整个文档都会被覆盖。这是 MongoDB 的默认行为。

三、$set 操作符

如果我们只想更改汤姆文档中的 “性别 ”字段,可以使用 $set 来指定要更新的字段:

db.student.update(
{name: 'Tom'}, // query criteria
{$set: {sex: 'F'}} // update action
);

$set 的值是一个对象,它的字段代表文档中要更新的字段,这些字段的值就是目标值。

因此,现在的结果是正确的:

mongo更新操作符

此外,如果想同时更改 “性别 ”和 “年龄”,可以将它们追加到 $set :

db.student.update(
{name: 'Tom'}, // query criteria
{$set: {sex: 'F', age: 40}} // update action
);