| 参数 | 含义 |
|---|---|
fieldName |
将更新的字段 :{name: 'Tom'} |
targetVaule |
值将分配给字段 :{name: 'Tom'} |
Section 5.1: $set 操作符更新文档中的指定字段
一、概述 MongoDB 与 RDBMS 的一个显著区别是,MongoDB 有许多种操作符。其中之一就是更新操作符,它用于更新语句中。 二、如果不使用更新操作符会发生什么? 假设我们有一个存储学生信息的学生集合(表视图):

有一天,你接到一份工作,需要把汤姆的性别从 “男 ”改成 “女”。这很简单,对吗?于是,你根据自己在 RDBMS 方面的经验,很快写出了下面的语句:
db.student.update(
{name: 'Tom'}, // query criteria
{sex: 'F'} // update action
);
让我们看看结果如何:

我们丢失了汤姆的年龄和姓名!从这个例子中,我们可以知道,如果 update 语句中没有任何 update 操作符,整个文档都会被覆盖。这是 MongoDB 的默认行为。
三、$set 操作符
如果我们只想更改汤姆文档中的 “性别 ”字段,可以使用 $set 来指定要更新的字段:
db.student.update(
{name: 'Tom'}, // query criteria
{$set: {sex: 'F'}} // update action
);
$set 的值是一个对象,它的字段代表文档中要更新的字段,这些字段的值就是目标值。
因此,现在的结果是正确的:

此外,如果想同时更改 “性别 ”和 “年龄”,可以将它们追加到 $set :
db.student.update(
{name: 'Tom'}, // query criteria
{$set: {sex: 'F', age: 40}} // update action
);