MongoDB Field Update Operators Tutorial
Hello readers, in this tutorial, we will understand the different Field Update Operators available in the Mongo database. Let’s study in brief the different ways in which these operators can be used.
Table Of Contents
1. Introduction
If you have installed the MongoDB application (version 3.6.X) on Windows or Ubuntu operating system and you wish to learn the field update operators, then follow the below steps. It is very simple, but before moving further let’s take a look at MongoDB and its features.
1.1 What is MongoDB?
- MongoDB is a high-performance NoSQL database where each database has collections which in turn has documents. Each document has a different number of fields, size, content, and is stored in a JSON-like format (i.e. Binary JSON (BSN)
- The documents in MongoDB doesn’t need to have a schema defined beforehand. Instead, the fields (i.e. records) can be created on the go
- Data model available within the MongoDB allows developers to represent the hierarchical relationships, store arrays, and other more complex structures easily
- This NoSQL solution often comes with embedding, auto-sharding, and onboard replication for better scalability and high availability
1.2 Why MongoDB?
- As a NoSQL type database, MongoDB stores the data in the form of a document. Thus, MongoDB offers more flexibility
- This database supports search by field-name, range queries, and the regular expressions. It often provides queries to return the particular fields inside the documents
- MongoDB offers indexes to improve the search performance within the NoSQL database
- To offer horizontal scalability, MongoDB uses sharding by splitting the data across the many MongoDB occurrences
- Replication: MongoDB can give high availability with the replica sets
2. MongoDB Field Update Operators Tutorial
In this tutorial, we will learn how to handle the different field update operators provided by the Mongo database. But before moving further with the tutorial, we will need to create the sample collection. The following script creates a database called office
with a collection as emp
. Open the Mongo terminal and execute the script.
> use office > db.emp.insertMany( [ { "_id" : "101", "name" : "Daniel Atlas", "age": 26, "unit_tag_code": "tech_1001" }, { "_id" : "102", "name" : "Charlotte Neil", "age": 30, "unit_tag_code": "hr_1002" }, { "_id" : "103", "name" : "James Breen", "age": 32, "unit_tag_code": "payroll_1064" }, { "_id" : "104", "name" : "John Gordon", "age": 24, "unit_tag_code": "tech_1001" }, { "_id" : "105", "name" : "Rick Ford", "age": 21, "unit_tag_code": "hr_1002" }, { "_id" : "106", "name" : "Susan Dixit", "age": 34, "unit_tag_code": "payroll_1064" }, { "_id" : "107", "name" : "John Snow", "age": 31, "unit_tag_code": "tech_1001" }, { "_id" : "108", "name" : "Arya Stark", "age": 30, "unit_tag_code": "hr_1002" }, { "_id" : "109", "name" : "Smith William", "age": 27, "unit_tag_code": "payroll_1064" }, { "_id" : "110", "name" : "John Daniel", "age": 29, "unit_tag_code": "tech_1001" } ] ) > db.emp.find()
If everything goes well, the database and the collection will be shown in the Mongo Workbench.
2.1 $inc Operator
In the Mongo universe, the $inc
operator allows the developers to increment or decrement the value of a field by a given amount. In case, the field does not exist in the document, this operator will create a new field and set the field value to the given value. Make note, the use of $inc
operator on a field with a null value will throw an error. Here is what the query syntax will look like:
Syntax
> db.collection_name.update( { <query_string> }, { $inc: { <field1_name>: <amount>, <field2_name>: <amount>, . . . . } } )
Where:
- The
query_string
in theupdate()
method is a required input argument that retrieves the documents from a collection on the basis of the given condition - The
field1_name
,field2_name
etc. are the field names - The
amount
specifies the increment or the decrement value
Let’s understand this with the help of an example.
2.1.1 $inc operator Example
Consider a scenario where developers want to fetch the documents from a collection having the employee unit tagging as hr_1002
and increment the employee’s age by 2
. The following Mongo query can be used:
Query 1
> db.emp.update( { "unit_tag_code": "hr_1002" }, { $inc: { "age": 2 } } );
The query will only increment the age value for the first matching document of the given condition. To see the updated output, developers can use the find()
method as shown in the below image.
2.1.2 $inc operator with ‘multi:true’
Let’s say developers want to add a new field like work_experience
with a given value 5
for all the documents that match the given condition. The following Mongo query can be used:
Query 1(a)
> db.emp.update( { "unit_tag_code": "payroll_1064" }, { $inc: { "work_experience": 5 } }, { "multi": true } )
The query with the multi: true
option will add the new field (i.e. work_experience
) to all the matching documents. To see the updated output, developers can use the find()
method as shown in the below image.
2.1.3 $inc operator on Multiple fields
Consider a scenario where developers want to increment the age and work experience for all the matching documents against a given condition. The following Mongo query can be used:
Query 1(b)
> db.emp.update( { "unit_tag_code": "payroll_1064" }, { $inc: { "work_experience": 2, "age": -1 } }, { "multi": true } )
The query with the multi: true
option will increment the work experience by 2
and decrement the employee age by 1
for all the matching documents. To see the updated output, developers can use the find()
method as shown in the below image.
2.2 $rename Operator
In the Mongo universe, the $rename
operator updates the name of a field. If the field does not exist in the document, this operation will do nothing. Here is what the query syntax will look like:
Syntax
> db.collection_name.update( { <query_string> }, { $rename: { <old_name1>: <new_name1>, <old_name2>: <new_name2>, . . . . } } )
Where:
- The
query_string
in theupdate()
method is a required input argument that retrieves the documents from a collection on the basis of the given condition - The
old_name1
,old_name2
etc. specifies the old name of the fields - The
new_name1
,new_name2
etc. specifies the new name of the fields
Let’s understand this with the help of an example.
2.2.1 $rename operator Example
Let’s say developers want to change the field name to emp_full_name
for the documents that match the given condition. The following Mongo query can be used:
Query 2
> db.emp.update( { "unit_tag_code": "tech_1001" }, { $rename: { "name": "emp_full_name", "age": "emp_age" } } )
The query will only rename the field value for the first matching document of the given condition. To see the updated output, developers can use the find()
method as shown in the below image.
2.2.2 $rename operator with ‘multi:true’
If developers want to rename the field values for all the matching documents, they can use the multi: true
option in conjugation with the Query 2. The following Mongo query can be used:
Query 2(a)
> db.emp.update( { "unit_tag_code": "tech_1001" }, { $rename: { "name": "emp_full_name", "age": "emp_age" } }, { "multi": true } )
The query will rename the field values for all the matching documents. To see the updated output, developers can use the find()
method as shown in the below image.
2.3 $set Operator
In the Mongo universe, the $set
operator replaces the field value to a given value. If the field does not exist in the document, this operation will add the new field with the specified value. Here is what the query syntax will look like:
Syntax
> db.collection_name.update( { <query_string> }, { $set: { <field1>: <value1>, <field2>: <value2>, . . . . } } )
Where:
- The
query_string
in theupdate()
method is a required input argument that retrieves the documents from a collection on the on the basis of the given condition - The
field1
,field2
etc. specifies the field whose value is changing - The
value1
,value2
etc. specifies the new value of the field
Let’s understand this with the help of an example.
2.3.1 $set operator Example
Let’s say developers want to change the content of the unit tagging field for the documents that match the given condition. The following Mongo query can be used:
Query 3
> db.emp.update( { "unit_tag_code": "payroll_1064" }, { $set: { "email": "admin@dineresort@com"} }, { "multi": true } )
The query with the multi: true
option will update the content of the email field for all the matching documents. Here, if the field does not exist in any document, the $set
operator will add this field with the specified value. To see the updated output, developers can use the find()
method as shown in the below image.
2.4 $setOnInsert Operator
In the Mongo universe, the $setOnInsert
operator set values to a field during an upsert only. This operator performs an insert and makes a difference to the update()
method on the basis of an upsert flag. Make note:
- If the update operation has the
upsert: true
option, it results in the insertion of a document - If the update operation does not result in an insert, the
$setOnInsert
operator does nothing
Here is what the query syntax will look like:
Syntax
> db.collection_name.update( { <query_string> }, { $setOnInsert: { <field1>: <value1>, <field2>: <value2>, . . . . } }, { "upsert": boolean_value } )
Where:
- The
query_string
in theupdate()
method is a required input argument that retrieves the documents from a collection on the on the basis of the given condition - The
field1
,field2
etc. are the field names - The
value1
,value2
etc. are the values to be set for a field
Let’s understand this with the help of an example.
2.4.1 $setOnInsert operator Example to Insert a document
Let’s say developers want to perform an insert using this operator. The following Mongo query can be used:
Query 4
> db.emp.update( { "unit_tag_code": "band_101" }, { $setOnInsert: { "work_description": "Performs required activities", "band_rating": "default" } }, { "upsert": true })
The query will insert a new document in the emp
collection and apply a $setOnInsert
to the work description and rating fields. To see the updated output, developers can use the find()
method as shown in the below image.
2.4.2 $setOnInsert operator Example to Update a document
Let’s say developers want to perform an update using this operator. The following Mongo query can be used:
Query 5
> db.emp.update( { "unit_tag_code": "band_101" }, { $setOnInsert: { "work_description": "Performs required activities", "band_rating": "default" } , $set: { "workforce_strength": 101 } }, { "upsert": true })
As the document already has the work description and rating fields, the query will update the existing document. The database will ignore the $setOnInsert
operation and only execute the $set
operation.
2.5 $unset Operator
In the Mongo universe, the $unset
operator deletes the given field from the document. This operator has no effect if the given field is not present in the document and has the following prototype form:
Syntax
> db.collection_name.update( { <query_string> }, { $unset: { <field1>: < ""> } } )
Where:
- The
query_string
in theupdate()
method is a required input argument that retrieves the documents from a collection on the on the basis of the given condition - The
field1
is the name of the field
Let’s understand this with the help of an example.
2.5.1 $unset operator Example
Let’s say developers want to delete the given field from all the matching documents. The following Mongo query can be used:
Query 6
> db.emp.update( { "unit_tag_code": "payroll_1064" }, { $unset: { "email": "" } }, { "multi": true } )
The query with the multi: true
option will delete the given field from all the matching documents. To see the updated output, developers can use the find()
method as shown in the below image.
2.6 Other Operators
In the recent release of Mongo documentation, the product owners have added a few more syntaxes specifically to this operation. Let’s review them one by one.
$currentDate
: This operator sets the value of a field to current date (i.e. either asDate
or aTimestamp
). For details on this operator, please refer this link$min
: This operator updates the field if the given value is less than the existing field value. For details on this operator, please refer this link$max
: This operator updates the field if the given value is more than the existing field value. For details on this operator, please refer this link$mul
: This operator multiples the value of a field by the given amount. For details on this operator, please refer this link
That’s all for this post. Happy Learning!!
3. Conclusion
In this tutorial, we learned about the different field update operators of the Mongo database. Do remember:
- The field update operator will only update the first matching document irrespective of the condition that there is more than one matching document
- Developers can update multiple matching documents by using the
{ "multi": true }
option - The
find()
method used in above expressions displays the documents in a non-structured pattern. If developers want to display the output in a structured pattern, they can use the pretty() method
I hope this article served developers with whatever they were looking for. Developers can download the sample commands in the Downloads section.
4. Download the Eclipse Project
This was an example of the different field update operators available in the Mongo database.
You can download the full source code of this example here: Field_Update_Operators_Cmds