$setOnInsert
Definition
$setOnInsert
- If an update operation with upsert: trueresults in an insert of a document, then
$setOnInsert
assigns the specified values to the fields in the document. If theupdate operation does not result in an insert,$setOnInsert
does nothing.
You can specify the upsert
option for either thedb.collection.update()
ordb.collection.findAndModify()
methods.
- db.collection.update(
- <query>,
- { $setOnInsert: { <field1>: <value1>, ... } },
- { upsert: true }
- )
To specify a <field>
in an embedded document or in an array, usedot notation.
Example
A collection named products
contains no documents.
Then, the following db.collection.update()
with upsert:true inserts a new document.
- db.products.update(
- { _id: 1 },
- {
- $set: { item: "apple" },
- $setOnInsert: { defaultQty: 100 }
- },
- { upsert: true }
- )
MongoDB creates a new document with _id
equal to 1
from the<query>
condition, and then applies the $set
and$setOnInsert
operations to this document.
The products
collection contains the newly-inserted document:
- { "_id" : 1, "item" : "apple", "defaultQty" : 100 }
If the db.collection.update()
with upsert: true had found a matching document, then MongoDBperforms an update, applying the $set
operation but ignoringthe $setOnInsert
operation.
See also