• Post author:
  • Post category:MongoDB
  • Post last modified:May 9, 2024
  • Reading time:8 mins read
You are currently viewing MongoDB Update Field using Value from Another Field

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

Advertisements

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": "[email protected]"       
       },
       {
           "_id": 2,
          "name" : "Emily" ,
          "father_name": "Paul",
          "salary": 3000,
          "bonus": 500,
          "email": "[email protected]"
       },
       {
          "_id": 3,
          "name" : "Bella" ,
          "father_name": "Kim",
          "salary": 2000,
          "bonus": 400,
          "email": "[email protected]"
       }
  ])

1.1 Update Field From Another Field Using $set operator

The $set operator is used to updating the value of a field in a document. To update a field using the value of another field in MongoDB, 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.

MongoDB Update Field

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


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

Yields below output.

MongoDB Update Field

1.2 Using the $project operator

We also 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.

MongoDB Update Field

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 in MongoDB, 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.

MongoDB Update Field

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.

MongoDB Update Field

2. Conclusion

It’s standard practice in MongoDB to update a column using data from another column. 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.