MongoDB Обновить многие элементы во вложенном объекте по массиву идентификаторов - PullRequest
0 голосов
/ 02 августа 2020

Как обновить некоторые вложенные объекты, найденные этим идентификатором в MongoDB.

В приведенном ниже случае будет обновлен только первый элемент!

Обновите все вложенные объекты в 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 Ответ

0 голосов
/ 02 августа 2020

Вы можете сделать как показано ниже

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