MongoDB Update many item in nested object by array of Id

Viewed 323

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')
    }
  );
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')
    }
  );
Related