On this page本页内容
$set
The $set
operator replaces the value of a field with the specified value.$set
运算符用指定值替换字段的值。
The $set
operator expression has the following form:$set
运算符表达式具有以下形式:
{ $set: { <field1>: <value1>, ... } }
To specify a 要在嵌入文档或数组中指定<field>
in an embedded document or in an array, use dot notation.<field>
,请使用点表示法。
Starting in MongoDB 5.0, update operators process document fields with string-based names in lexicographic order. 从MongoDB 5.0开始,更新运算符以词典顺序处理具有基于字符串的名称的文档字段。Fields with numeric names are processed in numeric order. 具有数字名称的字段按数字顺序处理。See Update Operators Behavior for details.有关详细信息,请参阅更新运算符行为。
If the field does not exist, 如果字段不存在,$set
will add a new field with the specified value, provided that the new field does not violate a type constraint. $set
将添加具有指定值的新字段,前提是新字段不违反类型约束。If you specify a dotted path for a non-existent field, 如果为不存在的字段指定虚线路径,$set
will create the embedded documents as needed to fulfill the dotted path to the field.$set
将根据需要创建嵌入文档,以实现该字段的虚线路径。
If you specify multiple field-value pairs, 如果指定多个字段值对,$set
will update or create each field.$set
将更新或创建每个字段。
Starting in MongoDB 5.0, 从MongoDB 5.0开始,当使用带有空操作数表达式(mongod
no longer raises an error when you use an update operator like $set
with an empty operand expression ( { }
). { }
)的更新运算符(如$set
)时,mongod
不再引发错误。An empty update results in no changes and no oplog entry is created (meaning that the operation is a no-op).空更新不会导致任何更改,也不会创建oplog条目(这意味着该操作是无操作)。
Create the 创建products
collection: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 } ] } )
For the document matching the criteria 对于匹配条件_id
equal to 100
, the following operation uses the $set
operator to update the value of the quantity
field, details
field, and the tags
field._id
等于100的文档,以下操作使用$set
运算符更新quantity
字段、details
信息字段和tags
字段的值。
db.products.updateOne( { _id: 100 }, { $set: { quantity: 500, details: { model: "2600", make: "Fashionaires" }, tags: [ "coats", "outerwear", "clothing" ] } } )
The operation updates the:该操作将更新:
quantity
to 500
quantity
值为500
details
field with new embedded documentdetails
字段tags
field with new arraytags
字段{ _id: 100, quantity: 500, instock: true, reorder: false, details: { model: '2600', make: 'Fashionaires' }, tags: [ 'coats', 'outerwear', 'clothing' ], ratings: [ { by: 'Customer007', rating: 4 } ] }
To specify a 要在嵌入文档或数组中指定<field>
in an embedded document or in an array, use dot notation.<field>
,请使用点表示法。
For the document matching the criteria 对于匹配条件_id
equal to 100
, the following operation updates the make
field in the details
document:_id
等于100
的文档,以下操作将更新details
信息文档中的make
字段:
db.products.updateOne( { _id: 100 }, { $set: { "details.make": "Kustom Kidz" } } )
After updating, the document has the following values:更新后,文档具有以下值:
{ _id: 100, quantity: 500, instock: true, reorder: false, details: { model: '2600', make: 'Kustom Kidz' }, tags: [ 'coats', 'outerwear', 'clothing' ], ratings: [ { by: 'Customer007', rating: 4 } ] }
To specify a 要在嵌入文档或数组中指定<field>
in an embedded document or in an array, use dot notation.<field>
,请使用点表示法。
For the document matching the criteria 对于与等于_id
equal to 100
, the following operation updates the value second element (array index of 1
) in the tags
field and the rating
field in the first element (array index of 0
) of the ratings
array.100
的条件_id
匹配的文档,以下操作更新tags
字段中的值第二元素(数组索引1
)和rating
数组的第一元素(数组指数0
)中的ratings
字段。
db.products.updateOne( { _id: 100 }, { $set: { "tags.1": "rain gear", "ratings.0.rating": 2 } } )
After updating, the document has the following values:更新后,文档具有以下值:
{ _id: 100, quantity: 500, instock: true, reorder: false, details: { model: '2600', make: 'Kustom Kidz' }, tags: [ 'coats', 'rain gear', 'clothing' ], ratings: [ { by: 'Customer007', rating: 2 } ] }
For additional update operators for arrays, see Array Update Operators.有关数组的其他更新运算符,请参阅数组更新运算符。