$set

在本页面

Definition

$set运算符表达式具有以下形式:

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

要在嵌入式文档或数组中指定<field>,请使用dot notation

Behavior

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

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

Examples

考虑包含以下文档的集合products

{
  _id: 100,
  sku: "abc123",
  quantity: 250,
  instock: true,
  reorder: false,
  details: { model: "14Q2", make: "xyz" },
  tags: [ "apparel", "clothing" ],
  ratings: [ { by: "ijk", rating: 4 } ]
}

设置顶级字段

对于符合等于100的准则_id的文档,以下操作使用$set运算符更新quantity字段,details字段和tags字段的值。

db.products.update(
   { _id: 100 },
   { $set:
      {
        quantity: 500,
        details: { model: "14Q3", make: "xyz" },
        tags: [ "coats", "outerwear", "clothing" ]
      }
   }
)

该操作将值quantity替换为500details字段表示新的嵌入式文档,而tags字段表示新的数组。

设置嵌入式文档中的字段

要在嵌入式文档或数组中指定<field>,请使用dot notation

对于符合条件_id等于100的文档,以下操作将更新details文档中的make字段:

db.products.update(
   { _id: 100 },
   { $set: { "details.make": "zzz" } }
)

设置数组中的元素

要在嵌入式文档或数组中指定<field>,请使用dot notation

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

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

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

首页