12
This is how to do upserting in MongoDB
![](https://res.cloudinary.com/practicaldev/image/fetch/s--8Z0O-erm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://donaldfeury.xyz/content/images/2021/08/MongoDB_Logo2-4.png)
For a full overview of MongoDB and all my posts on it, check out my overview.
Upserting is a database concept that combines inserting and updating that MongoDB supports. To perform an upsert during an update operation, you must pass an additional argument to the update
, updateOne
, or updateMany
methods.
With the given data inserted in a collection called users
:
db.users.insertMany([
{
_id: 1,
name: "John Doe",
email: "[email protected]",
admin: true
},
{
_id: 2,
name: "Jane Doe",
email: "[email protected]",
admin: true
},
{
_id: 3,
name: "Billy Bob",
email: "[email protected]",
admin: false
},
{
_id: 4
name: "Steve Stevenson",
email: "[email protected]",
admin: true
},
])
If the following command is used:
db.users.updateOne({_id: 5}, {$set: {admin: true}})
It won't do anything as there is no document matching the query of _id = 5
.
If upserting is enabled:
db.users.updateOne(
{_id: 5},
{ $set: { admin: true } },
{ upsert: true }
)
Since there is no document matching the query, a new document is inserting using the given _id
and the result of the update operators.
db.users.find()
Will yield:
{
_id: 1,
name: "John Doe",
email: "[email protected]",
admin: true
},
{
_id: 2,
name: "Jane Doe",
email: "[email protected]",
admin: true
},
{
_id: 3,
name: "Billy Bob",
email: "[email protected]",
admin: false
},
{
_id: 4
name: "Steve Stevenson",
email: "[email protected]",
admin: true
},
{
_id: 5
admin: true
}
12