- Reference >
- Operators >
- Update Operators >
- Field Update Operators >
- $set
$set¶
On this page
Definition¶
-
$set
¶ The
$set
operator replaces the value of a field with the specified value.The
$set
operator expression has the following form:{ $set: { <field1>: <value1>, ... } }
To specify a
<field>
in an embedded document or in an array, use dot notation.
Behavior¶
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.
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.
If you specify multiple field-value pairs, $set
will update
or create each field.
Examples¶
Consider a collection products
with the following document:
{
_id: 100,
sku: "abc123",
quantity: 250,
instock: true,
reorder: false,
details: { model: "14Q2", make: "xyz" },
tags: [ "apparel", "clothing" ],
ratings: [ { by: "ijk", rating: 4 } ]
}
Set Top-Level Fields¶
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.
db.products.update(
{ _id: 100 },
{ $set:
{
quantity: 500,
details: { model: "14Q3", make: "xyz" },
tags: [ "coats", "outerwear", "clothing" ]
}
}
)
The operation replaces the value of: quantity
to 500
; the
details
field to a new embedded document, and the tags
field to
a new array.
Set Fields in Embedded Documents¶
To specify a <field>
in an embedded document or in an array, use
dot notation.
For the document matching the criteria _id
equal to 100
, the
following operation updates the make
field in the details
document:
db.products.update(
{ _id: 100 },
{ $set: { "details.make": "zzz" } }
)
Set Elements in Arrays¶
To specify a <field>
in an embedded document or in an array, use
dot notation.
For the document matching the criteria _id
equal to 100
, the
following operation update 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.
db.products.update(
{ _id: 100 },
{ $set:
{
"tags.1": "rain gear",
"ratings.0.rating": 2
}
}
)
For additional update operators for arrays, see Array Update Operators.