Home > Software design >  MongoDB: Updating element in array always results in first element updated
MongoDB: Updating element in array always results in first element updated

Time:08-13

TL;DR : Updating element in array always results in first element updated and results differ based on property name of key used in find params Playground : https://mongoplayground.net/p/-4kGZnxa-WA

I want to update an object in a array and I am using 2 of the object properties to find the object then using $set operator with array.$.updateProperty to update the object

Here is the working playground link of what I want to do: https://mongoplayground.net/p/dswt8vuzJMc

But I cant reproduce the same when I change a single property name (both in database as well as find parameter) , from the above example I changed property foo to trackID but then only the first element in array is always updated

Playground : https://mongoplayground.net/p/-4kGZnxa-WA

It seems weird as I assumed the property name shouldn't matter as long as it used the same in find params too and its not a keyword like _id

CodePudding user response:

Your update is very close. You need to use "$elemMatch" to identify the specific array position where both conditions match.

N.B.: $ will only update the first matching array element. If you want to update all array elements, use $[], and if you want to update all matching array elements, using "arrayFilters" with $[<indentifier>] is convenient.

db.collection.update({
  "_id": ObjectId("62f11e22d99c79532de6ff7f"),
  "jobs": {
    "$elemMatch": {
      "trackID": 0,
      "name": "kaisen_track-0_h264_1080p"
    }
  }
},
{
  "$set": {
    "jobs.$.status": "Done"
  }
})

Try it on mongoplayground.net.

  • Related