文档菜单
文档首页
/
MongoDB 手册
/ / / /

$set

本页内容

  • 定义
  • 兼容性
  • 语法
  • 行为
  • 示例

注意

区分

以下页面涉及更新运算符$set。关于聚合阶段,请参阅$set.

$set

$set运算符用指定值替换字段的值。

您可以在以下环境中使用$set

  • MongoDB Atlas:云中MongoDB部署的全托管服务

$set 操作符表达式具有以下形式

{ $set: { <field1>: <value1>, ... } }

要指定嵌入式文档或数组中的 <field>,请使用 点表示法。

从 MongoDB 5.0 开始,更新操作符按照基于字符串的名称的字典顺序处理文档字段。具有数字名称的字段按数字顺序处理。有关详细信息,请参阅 更新操作符行为

如果字段不存在,$set 将添加一个具有指定值的新字段,前提是新字段不违反类型约束。如果您指定了一个不存在字段的点路径,$set 将根据需要创建嵌入式文档以实现到字段的点路径。

如果您指定了多个字段值对,$set 将更新或创建每个字段。

从 MongoDB 5.0 开始,mongod 在使用类似 $set 的更新操作符且操作数表达式为空({ })时不再引发错误。空更新不会引起更改,并且不会创建任何 操作日志 条目(意味着该操作是 no-op)。

创建 products 集合

db.products.insertOne(
{
_id: 100,
quantity: 250,
instock: true,
reorder: false,
details: { model: "14QQ", make: "Clothes Corp" },
tags: [ "apparel", "clothing" ],
ratings: [ { by: "Customer007", rating: 4 } ]
}
)

对于匹配条件 _id 等于 100 的文档,以下操作使用 $set 操作符更新 quantity 字段、details 字段和 tags 字段的值。

db.products.updateOne(
{ _id: 100 },
{ $set:
{
quantity: 500,
details: { model: "2600", make: "Fashionaires" },
tags: [ "coats", "outerwear", "clothing" ]
}
}
)

该操作更新了

  • quantity 的值为 500

  • details 字段与新的嵌套文档

  • tags 字段与新的数组

{
_id: 100,
quantity: 500,
instock: true,
reorder: false,
details: { model: '2600', make: 'Fashionaires' },
tags: [ 'coats', 'outerwear', 'clothing' ],
ratings: [ { by: 'Customer007', rating: 4 } ]
}

要指定嵌入式文档或数组中的 <field>,请使用 点表示法。

对于匹配以下条件的文档 _id 等于 100,以下操作更新了 details 文档中的 make 字段

db.products.updateOne(
{ _id: 100 },
{ $set: { "details.make": "Kustom Kidz" } }
)

更新后,文档具有以下值

{
_id: 100,
quantity: 500,
instock: true,
reorder: false,
details: { model: '2600', make: 'Kustom Kidz' },
tags: [ 'coats', 'outerwear', 'clothing' ],
ratings: [ { by: 'Customer007', rating: 4 } ]
}

重要

上述代码使用 点表示法 更新内嵌的 details 文档的 make 字段。代码格式类似于以下代码示例,该示例将 替换整个内嵌文档,移除内嵌 details 文档中的所有其他字段

db.products.updateOne(
{ _id: 100 },
{ $set: { details:
{make: "Kustom Kidz"}
}
})

要指定嵌入式文档或数组中的 <field>,请使用 点表示法。

对于匹配以下条件的文档 _id 等于 100,以下操作更新了 tags 字段中第二个元素(数组索引为 1)和 ratings 数组中第一个元素(数组索引为 0)的 rating 字段。

db.products.updateOne(
{ _id: 100 },
{ $set:
{
"tags.1": "rain gear",
"ratings.0.rating": 2
}
}
)

更新后,文档具有以下值

{
_id: 100,
quantity: 500,
instock: true,
reorder: false,
details: { model: '2600', make: 'Kustom Kidz' },
tags: [ 'coats', 'rain gear', 'clothing' ],
ratings: [ { by: 'Customer007', rating: 2 } ]
}

有关数组的其他更新运算符,请参阅 数组更新运算符。

提示

另请参阅

返回

$rename