Jonny Piazzi
Jonny Piazzi

Reputation: 3794

Update items in a property with array type on MongoDB

I have a collection with documents like:

{
  "_id": "Mongo ObjectID",
  "some_prop": "some_value",
  "features": [
    { "name": "A", "icon": "01.png" },
    { "name": "B", "icon": "02.png" }
  ]
}

Another document sample:

{
  "_id": "Mongo ObjectID",
  "some_prop": "other one",
  "features": [
    { "name": "B", "icon": "02.png" },
    { "name": "C", "icon": "03.png" },
    { "name": "D", "icon": "04.png" }
  ]
}

Notice that in the first document and the second there is the same feature B. This occurs all over many documents.

What I need is to update all features B to a new icon, something like this:

{ "name": "B", "icon": "10.png" }

I need to apply this change for all documents that has a feature with name B.

I already did a very horrible code to get all documents and update one by one in a loop. But my guess is there is a better way to do it, maybe in a single collection.update command? I'm new in MongoDB and so far googling didnt work.

Upvotes: 1

Views: 91

Answers (1)

Ashh
Ashh

Reputation: 46481

You need to use $positional operator to update the fields inside an array

db.collection.updateMany(
  { "features.name": "B" },
  { "$set": { "features.$.icon": "10.png" }}
)

Upvotes: 2

Related Questions