MongoDB provides the update() command to update the documents of a collection. To update only the documents you want to update, you can add a criteria to the update statement so that only selected documents are updated. |
db.collection.update(query, update, options) |
By default, the db.collection.update() method updates a single document. To update multiple documents, use the multi option. |
Syntax: db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document>, collation: <document>, arrayFilters: [ <filterdocument1>, ... ], hint: <document|string> // Available starting in MongoDB 4.2 } ) |
The db.collection.update() method takes the following parameters: |
Parameter | Type | Description |
Query | Document | The selection criteria for the update. The same query selectors as in the find() method are available. |
Update | Document or pipeline | The modifications to apply. |
Option | ||
Upsert | Boolean | Optional. If set to true, creates a new document when no document matches the query criteria. The default value is false, which does not insert a new document when no match is found. |
multi | Boolean | Optional. If set to true, updates multiple documents that meet the query criteria. If set to false, updates one document. The default value is false. |
wrireConcern | Document | Optional. A document expressing the write concern. Omit to use the default write concern w: 1. |
Collation | Document | Optional: Collation allows users to specify language-specific rules for string comparison, such as rules for lettercase and accent marks. |
arrayFilters | Array | Collation allows users to specify language-specific rules for string comparison, such as rules for lettercase and accent marks. |
Hint | Document or string | Optional. A document or string that specifies the index to use to support the query predicate. |
Let take an example to update the document or documents using update method. Side by side we can also check the RDBMS syntax to better understanding. |
||
First check the how many documents we have in an inventory collection in TechDB database. |
||
Example - 1 Update the document where item = “mat” and set the new value of qty = 100 and size.h=30 Lets first find the document where item = “mat”. We found 1 document only. |
||
MongoDB Update method |
RDBMS syntax |
db.inventory.update( {"item":"mat"}, {$set: {"qty":100,"size.h":30} } ) |
Update inventory Set qty = 100, h=30 Where item = “mat” |
Explanation: {“item”:”mat”} -- query parameter Update parameter and $set is update operator. {$set: {"qty":100,"size.h":30} } Option parameter is optional |
Where item = “mat” -- Filter criteria |
Let's check the document updated or not. db.inventory.find({item:"mat"}) |
|
You can see above document updated successfully. qty = 100 and size.h = 30.0 |
|
Example - 2 Let's update the document or documents where status = “A” and set the new value of qty = 10 first find the document where status = “A”. We found 6 documents in inventory collection. |
|
MongoDB Update method | RDBMS syntax |
db.inventory.update( {"status":"A"}, {$set: {"qty":10} } ) |
Update inventory Set qty = 10 Where status = “A” |
Only 1 document updated | All records updated |
Lets view the documents again where status = “A” |
|
You can see only 1 document updated with qty = 10. This happened because by Default Update() method updates a single document . To update multiple documents, use the multi option in option parameter. Lets run the same update statement with multi = true |
|
Syntax: db.inventory.update( {"status":"A"}, {$set: {"qty":10} }, { Multi : true } ) |
|
Lets check the documents updated or not in inventory collection. |
|
db.inventory.find({status:"A"}) |
|
Now all the documents updated with qty = 10. |
Example - 3 Update the document where item = “canvas”. I have added few elements / fields in this documents to understand the update. |
||
Let check first what and how the document looks like before update. We have only one document that meet the search criteria where item = “canvas” |
||
In this document we have Size have 3 fields "size" : { "h" : 28.0, "w" : 35.5, "uom" : "cm"} Color have 2 elements “color” : [“red”,”black”] Ratings have 2 elements and each element have 2 fields. In this example we are going to update 2nd element (highlighted). "ratings" : [ {"by" : "abc","rating" : 2}, {"by" : "xyz","rating" : 4} ] |
||
Now we are going to update these fields and elements. db.inventory.update( { item : "canvas" }, { $inc: { qty: 125 }, $set: { "size.h": 31, "color": [ "brown" ], "ratings.1": { "by": "sk", "rating": 5 } } } ) |
||
The result should be |
||
Before Update | After Update | Description |
Qty = 10 | Qty = 10+125 = 135 | $inc operator increments a field by a specified value |
Size.h = 28.0 | Size.h = 31.0 | Size.h means update only “h” Update the size.h value by $set operator |
Color = red, black | Color = brown | Update the array element by $set operator |
Ratings.1 by = “xyz” and /n rating=4 |
Ratings.1 by = “sk” and rating=5 |
Ratings.1 means 2nd element and Ratings.0 means 1st element. Update the fields of an array element by $set operator |
Now check the documents updated or not. | ||
You can see all the fields of Document updated successfully. | ||
No comments:
Post a Comment