Docs 菜单
Docs 主页
/
MongoDB Manual
/ / / /

$set

在此页面上

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

注意

消歧

以下页面是指更新操作符 $set。有关聚合阶段,请参阅 $set

$set

$set 操作符会用指定值替换某个字段的值。

可以使用 $set 查找托管在以下环境中的部署:

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

$set 操作符表达式的形式如下:

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

要在嵌入式文档或数组中指定 <field>,请使用点符号。

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

如果该字段不存在,$set 则会添加一个具有指定值的新字段,但前提是新字段不违反类型限制。如果为不存在的字段指定虚线路径,则 $set根据需要创建嵌入式文档,以满足该字段的虚线路径。

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

从 MongoDB 5.0 开始,使用带空操作数表达式 ({ }) 的更新操作符(如 $set)时,mongod 不会再引发错误。空更新不会导致任何变化,也不会创建 oplog 条目(意味着该操作为“无操作”)。

创建 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 运算符来更新 quantitydetailstags 字段的值。

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 } ]
}

重要

上述代码使用 dot notation 更新嵌入式 details 文档的 make 字段。代码格式看起来与以下代码示例类似,但该示例替换整个嵌入式文档,从而删除嵌入式 details 文档中的所有其他字段:

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

要在嵌入式文档或数组中指定 <field>,请使用点符号。

对于与 _id 条件等于 100 相匹配的文档,以下操作会更新 ratings 数组中 tags 字段内第二个元素(1 的数组索引)的值,以及第一个元素(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