Skip to content

MongoDB Update Field using Value from Another Field AQSA Spark By {Examples}

  • by

How to update a field using a value from another field in MongoDB? In this guide, we will discuss updating field functionality in MongoDB.

For changing a field using the data from a different field, MongoDB provides $set, $project, and $out. Each of these methods has its advantages and disadvantages, depending on the specific use case.

1. Methods to update fields using the value from other fields in MongoDB

Here, we will dive into some methods with the example implementation. Before using those approaches, let’s have a look at the following collection. Here, we have a collection of documents representing employee’s information, and each document has the following fields:

#Create Collection
db.Employees.insertMany([
{
“_id”: 1,
“name” : “Sam” ,
“father_name”: “David”,
“salary”: 5600,
“bonus”: 100,
“email”: “sam12@gmail.com”
},
{
“_id”: 2,
“name” : “Emily” ,
“father_name”: “Paul”,
“salary”: 3000,
“bonus”: 500,
“email”: “emily22@gmail.com”
},
{
“_id”: 3,
“name” : “Bella” ,
“father_name”: “Kim”,
“salary”: 2000,
“bonus”: 400,
“email”: “bella89@gmail.com”
}
])

1.1 Using the $set operator

The $set operator is used to set the value of a field in a document. To update a field using the value of another field, we can use the $set operator with an expression that references the value of the other field. The following update operation will update the email field with the value of the $name field where “_id” is “1” by using the $set operator. 

#Using Set Operator
db.Employees.updateMany(
{_id: 1},
{ $set: { email: “$name” } }
)

The output displayed the updated document below.

Now, to view the document with the modified fields, run the following query.

#View Modified Fields
db.Employees.find().pretty();

Yields below output.

1.2 Using the $project operator

Now, we have the $project operator to update a field in MongoDB. We can create a new field in the document that contains the updated value, and then use the $merge operator to replace the original document with the updated document.

In the following example, we are using the $project stage to create a new field called FullName that contains the concatenated value of $name and $father_name, separated by a space. Then, we use the $merge operator to replace the original document with the updated document. Additionally, this query updates all documents in the collection.

#Updating Documents in Collection using $project operator
db.Employees.aggregate({ $project:
{ FullName: { $concat: [“$name”,” “,”$father_name”] } } },
{ $merge: “Employees” })

The expected results are generated below.

To get more detail about the $project operator, you may visit MongoDB.

1.3 Using the $out operator

The $out operator is used to replace an existing collection with the results of an aggregation pipeline. Now, to update a field using the value of another field, we can use an aggregation pipeline that includes a $project stage to create a new field based on the value of the other field and a $out stage to replace the collection with the modified documents.

Consider the implementation of the below query. The pipeline utilizes the $project operator to create a new field titled “salary” that is equal to the value of the $name field and includes only the _id and salary fields in the output documents. Then the $out operator replaces the “Employees” collection with the modified documents.

#Modifying Documents in Collection
db.Employees.aggregate([
{ $addFields: { bonus: “$name” } },
{ $unset: “name” },
{ $out: “Employees” }
])

The output fetched from the above query.

1.4 Using the $addFields operator

Moreover, we can use the $addFields operator with an expression that references the value of the other field to update a field using the value of another field. The $addFields operator is used to add new fields to a document. The operation adds a new field named bonus that is equal to the value of the name field below. It then removes the name field and replaces the given collection with the modified document.

#Using $addFields operator to update fields
db.Employees.aggregate([
{ $addFields: { bonus: “$name” } },
{ $unset: “name” },
{ $out: “Employees” }
])

The output yield changed the field.

2. Conclusion

It’s standard practice in MongoDB to update a column using data from another column. There we have discussed the approaches to performing this task depending on our unique use case. The $set operator of MongoDB is the simplest approach while the $addFields operator enables us to add new fields and carry out additional actions on the document. When we need to substitute the modified documents for the complete collection, the $out operator comes in handy.

 How to update a field using a value from another field in MongoDB? In this guide, we will discuss updating field functionality in MongoDB. For changing a field using the data from a different field, MongoDB provides $set, $project, and $out. Each of these methods has its advantages and disadvantages, depending on the specific use  Read More MongoDB 

Leave a Reply

Your email address will not be published. Required fields are marked *