skip to Main Content

I have a collection named employees with documents like.

{
first_name:"john",
last_name:"doe"
}

I want to run an update query which adds a new field like {name:'john doe'}

I know it can be done like this

db.employees.find({}).forEach(doc=>db.employees.update({"_id":doc._id},{$set:{name:doc.first_name+"-"+doc.last_name}}))

but its taking a lot of time when i am using mongo compass with db running in atlas.

2

Answers


  1. Use the
    db.collection.updateMany()
    to update all documents that match a specified filter.

    for example:
    To update all documents in the sample_airbnb.listingsAndReviews collection to update where security_deposit is less than 100:

        use sample_airbnb
    
    db.listingsAndReviews.updateMany(
      { security_deposit: { $lt: 100 } },
      {
        $set: { security_deposit: 100, minimum_nights: 1 }
      }
    )
    

    The update operation uses the
    $set
    operator to update the value of the security_deposit field to 100 and the value of the minimum_nights field to 1.

    this was taken from :https://www.mongodb.com/docs/mongodb-shell/crud/update/

    Login or Signup to reply.
  2. Here’s one way you could do it by using an update aggregation pipeline.

    db.employees.update({
      "first_name": {"$exists": true},
      "last_name": {"$exists": true},
      "name": {"$exists": false}
    },
    [
      {
        "$set": {
          "name": {
            "$concat": ["$first_name", " ", "$last_name"]
          }
        }
      }
    ],
    {"multi": true}
    )
    

    Try it on mongoplayground.net.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search