Open In App

Update with Aggregation Pipeline

MongoDB is not just about storing and retrieving data. it also offers powerful tools for data manipulation and transformation. One such tool is the aggregation pipeline, which allows users to perform complex data processing operations within the database.

In this article, we’ll explore how to use the aggregation pipeline for updating documents in MongoDB by covering concepts and examples in an easy-to-understand manner.



Understanding the Aggregation Pipeline

Update with Aggregation Pipeline

Syntax:

The basic syntax for using aggregation pipeline in update operations is as follows:



db.collection.updateMany(
<filter>,
[
{
$set: {
<field>: <expression>
}
},
// Additional pipeline stages
]
)

Explanation:

Example of Update with Aggregation Pipeline

To understand Update with Aggregation Pipeline we need a collection and some documents on which we will perform various operations and queries. Here we will consider a collection called employees which contains information like name, salary, department and status of the employees in various documents.

[
{
"name": "John Doe",
"salary": 60000,
"department": "Engineering",
"status": "Senior"
},
{
"name": "Jane Smith",
"salary": 45000,
"department": "HR",
"status": "Junior"
},
{
"name": "Alice Johnson",
"salary": 75000,
"department": "Finance",
"status": "Senior"
},
...
]

Example 1: Updating Documents with Aggregation Pipeline

Let’s consider a scenario where we have a collection named employees containing documents representing employee records. We want to update the salary field for all employees by adding a 10% bonus. We can achieve this using the aggregation pipeline in the update operation

db.employees.updateMany(
{},
[
{
$set: {
salary: { $multiply: ["$salary", 1.1] }
}
}
]
)

Output:

[
{
"name": "John Doe",
"salary": 66000,
"department": "Engineering",
"status": "Senior"
},
{
"name": "Jane Smith",
"salary": 49500,
"department": "HR",
"status": "Junior"
},
{
"name": "Alice Johnson",
"salary": 82500,
"department": "Finance",
"status": "Senior"
}
]

Explanation:

Using Aggregation Operators in Updates

MongoDB provides a wide range of aggregation operators that can be used within the aggregation pipeline for update operations. These operators enable users to perform various transformations and computations on the data before updating documents.

Example Using $cond Operator

Suppose we want to update the status field for all employees based on their salary. If the salary is greater than $50,000, set the status to “Senior“; otherwise, set it to “Junior“. We can achieve this using the $cond operator within the update pipeline.

db.employees.updateMany(
{},
[
{
$set: {
status: {
$cond: {
if: { $gte: ["$salary", 50000] },
then: "Senior",
else: "Junior"
}
}
}
}
]
)

Output:

[
{
"name": "John Doe",
"salary": 60000,
"department": "Engineering",
"status": "Senior"
},
{
"name": "Jane Smith",
"salary": 45000,
"department": "HR",
"status": "Junior"
},
{
"name": "Alice Johnson",
"salary": 75000,
"department": "Finance",
"status": "Senior"
}
...
]

Explanation: The $cond operator evaluates the condition $gte (greater than or equal) to determine the value of the status field based on the salary.

Combining Multiple Stages

One of the key advantages of using the aggregation pipeline for updates is the ability to combine multiple stages to perform complex transformations in a single operation.

Example of Updating Multiple Fields

Suppose we want to update both the salary and department fields for all employees simultaneously. We can achieve this by adding multiple $set stages to the update pipeline

db.employees.updateMany(
{},
[
{
$set: {
salary: { $multiply: ["$salary", 1.1] }
}
},
{
$set: {
department: "Engineering"
}
}
]
)

Output:

[
{
"name": "John Doe",
"salary": 66000,
"department": "Engineering",
"status": "Senior"
},
{
"name": "Jane Smith",
"salary": 49500,
"department": "Engineering",
"status": "Junior"
},
{
"name": "Alice Johnson",
"salary": 82500,
"department": "Engineering",
"status": "Senior"
},
...
]

Explanation: Two $set stages are used to update the salary and department fields independently.

Conclusion

Overall, The ability to perform updates using the aggregation pipeline in MongoDB provides developers with a powerful tool for data manipulation and transformation. By understanding the aggregation expressions and operators, users can perform complex update operations with ease and eliminating the need for multiple queries to the database.


Article Tags :