MongoDB
In this MongoDB tutorial we will learn to update documents.
Login to your MongoDB server and insert the following documents.
For this tutorial I will insert the documents in the subscription collection.
> db.subscription.insertMany([ { "firstname": "John", "lastname": "Doe", "uid": 1, "accountstatus": "ACTIVE", "plan": "TRIAL15DAYS", "modifiedAt": null, "createdAt": new Date() }, { "firstname": "Jane", "lastname": "Doe", "uid": 2, "accountstatus": "ACTIVE", "plan": "PLAN30DAYS", "modifiedAt": null, "createdAt": new Date() }, { "firstname": "Jim", "lastname": "Doe", "uid": 3, "accountstatus": "SUSPENDED", "plan": "PLAN60DAYS", "modifiedAt": null, "createdAt": new Date() }, { "firstname": "Alice", "lastname": "Doe", "uid": 4, "accountstatus": "ACTIVE", "plan": "PLAN1YEAR", "modifiedAt": null, "createdAt": new Date() } ])
Note! We are using new Date() to set the createdAt to current date time.
new Date()
To update a single document we use updateOne method.
updateOne
db.collectionName.updateOne(filter, update)
Where, filter is the condition to get the required document and update is the part of the document we want to update.
In the following example we are updating the account status of user having uid equal to 3 from SUSPENDED to ACTIVE.
uid
3
> db.subscription.updateOne( { "uid": 3 }, { $set: { "accountstatus": "ACTIVE" }, $currentDate: { "modifiedAt": true } } )
We use $set operator to update the value of accountstatus.
$set
We use $currentDate operator to set the modifiedAt to current date.
$currentDate
If we now fetch the above document we will get the following.
> db.subscription.find({ "uid": 3 }).pretty() { "_id" : ObjectId("5d7715d5b385796f53d4c8ff"), "firstname" : "Jim", "lastname" : "Doe", "uid" : 3, "accountstatus" : "ACTIVE", "plan" : "PLAN60DAYS", "modifiedAt" : ISODate("2019-09-10T03:18:42.406Z"), "createdAt" : ISODate("2019-09-10T03:17:41.130Z") }
We can use the updateOne method to update an existing document and also insert a new document if it does not exists.
db.collectionName.updateOne(filter, update, option)
In the option set the upsert to true. This will help to insert new document if it doesn't exists.
upsert
true
In the following example we are inserting a new document in the subscription collection using the updateOne method.
subscription
> db.subscription.updateOne( { "uid": 5 }, { $set: { "firstname": "Bob", "lastname": "Doe", "uid": 5, "accountstatus": "ACTIVE", "plan": "PLAN1YEAR", "modifiedAt": null, "createdAt": new Date() } }, { upsert: true } )
If we now fetch the newly inserted document we will get the following result.
> db.subscription.find({ "uid": 5 }).pretty() { "_id" : ObjectId("5d771bc30a7168b744863bc6"), "uid" : 5, "accountstatus" : "ACTIVE", "createdAt" : ISODate("2019-09-10T03:42:59.876Z"), "firstname" : "Bob", "lastname" : "Doe", "modifiedAt" : null, "plan" : "PLAN1YEAR" }
To update multiple documents we use the updateMany method.
updateMany
In the following example we are updating the plan to PLAN60DAYS for uid 2, 3 and 4.
> db.subscription.updateMany( { "uid": { $in: [2, 3, 4] } }, { $set: { "plan": "PLAN60DAYS" }, $currentDate: { "modifiedAt": true } } )
Learn to filter document using $in and other operators in the MongoDB - Query Document tutorial.
$in
We use the replaceOne method to replace the entire content of a document except the _id.
replaceOne
_id
In the following example we are replacing the content of document having uid equal to 5.
> db.subscription.replaceOne( { "uid": 5 }, { "firstname": "Bob", "lastname": "Doe", "uid": 5, "accountstatus": "ACTIVE", "plan": "PLAN90DAYS", "modifiedAt": new Date(), "createdAt": new Date() } )
We can also use replaceOne method to insert new document if it does not exists by setting the upsert option to true.
> db.subscription.replaceOne( { "uid": 6 }, { "firstname": "Billy", "lastname": "Doe", "uid": 6, "accountstatus": "ACTIVE", "plan": "PLAN90DAYS", "modifiedAt": new Date(), "createdAt": new Date() }, { upsert: true } )