一、定义
$set操作符替换掉指定字段的值
$set操作符有如下格式:
{ $set: { <field1>: <value1>, ... } }
使用点号指定一个内嵌文档的字段;
二、规则
如果指定字段不存在$set操作符将会添加一个新的字段使用指定的值,前提是新字段不能违反类型规约,如果你使用点号指定一个不存在的内嵌文档字段将会添加一个新的内嵌字段;
如果指定多个字段值对,$set操作符将会新增或者更新每个字段;
三、例子
考虑如下的products集合文档
{
_id: 100,
sku: "abc123",
quantity: 250,
instock: true,
reorder: false,
details: { model: "14Q2", make: "xyz" },
tags: [ "apparel", "clothing" ],
ratings: [ { by: "ijk", rating: 4 } ]
}
设置顶级字段
如下查询_id为100的文档并且使用$set操作符更新如下字段:
db.products.update(
{ _id: 100 },
{ $set:
{
quantity: 500,
details: { model: "14Q3", make: "xyz" },
tags: [ "coats", "outerwear", "clothing" ]
}
}
)
上面的操作替换quantity的值为500,details为一个新的内嵌文档,tags为一个新的数组;
设置内嵌文档中的字段
使用点号指定内嵌文档或者数组中字段:
如下操作查询_id等于100的集合文档,并且更新内嵌文档details中的字段make:
db.products.update(
{ _id: 100 },
{ $set: { "details.make": "zzz" } }
)
设置数组中的元素:
查询调迁_id等于100的文档,如下操作更新两个元素(数组索引是1)在数组tags字段和rating字段的第一个元素(索引是0)
db.products.update(
{ _id: 100 },
{ $set:
{
"tags.1": "rain gear",
"ratings.0.rating": 2
}
}
)