设置运算符以更新文档中的指定字段

I.Overview

MongoDB 和 RDBMS 之间的一个显着区别是 MongoDB 有很多种运算符。其中之一是 update 运算符,用于 update 语句。

II。如果我们不使用更新运算符会发生什么?

假设我们有一个学生集合来存储学生信息(表视图): StackOverflow 文档

有一天,你得到的工作需要将汤姆的性别从 M 改为 F。这很简单,对吧?因此,根据你的 RDBMS 经验,你可以非常快速地写下以下声明:

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

让我们看看结果是什么: StackOverflow 文档

我们失去了汤姆的年龄和名字! 从这个例子中,我们可以知道如果在 update 语句中没有任何更新运算符,整个文档将被覆盖。这是 MongoDB 的默认行为。

III。$ set 运算符

如果我们只想更改 Tom 文档中的 sex 字段,我们可以使用 $set 来指定我们要更新的字段:

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

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

所以,结果现在是正确的: StackOverflow 文档

此外,如果你想同时更改性别年龄,你可以将它们附加到 $set

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