Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB Update many item in nested object by array of Id

Tags:

mongodb

How to update some of the nested objects found by thair Id in MongoDB.

In the below case, only the first Item will be updated!

Update all nested objects in updateMany.

"Parent":[{
        "Child": [{
                "_id": 5f26fad5b34a304dfc1dd16a,
                "isActive": false,                    
            }, {
                "_id": 5f26fad5b34a304dfc1dd16c,
                "isActive": false,                    
            }, {
                "_id": 5f2705281b42ea2de8b7c9e2,
                "isActive": false,                    
            } 
        ],
        "name": "Paretn1"
    },  
]



    parent.updateMany(
    { 
      "child._id": { $in: [ObjectId('5f26fad5b34a304dfc1dd16a'), ObjectId('5f26fad5b34a304dfc1dd16c') 
    ]} 
    },
    { $set: { "child.$.isActive": true } },
    { multi: true },
    () => {
      console.log('done')
    }
  );
like image 857
user1445018 Avatar asked Sep 12 '25 07:09

user1445018


1 Answers

You can do as below

parent.updateMany(
{ 
   "child._id": { $in: 
              [ObjectId('5f26fad5b34a304dfc1dd16a'), 
              ObjectId('5f26fad5b34a304dfc1dd16c') 
              ]} 
    },
    { $set: { "child.$[element].isActive": true } },
    { "arrayFilters": [{ "elem._id": {'$in' :[  
              ObjectId('5f26fad5b34a304dfc1dd16a'), 
              ObjectId('5f26fad5b34a304dfc1dd16c')] } }], "multi": true }, 
    () => {
        console.log('done')
    }
  );
like image 65
Gibbs Avatar answered Sep 15 '25 11:09

Gibbs