使用ID数组在MongoDB中更新嵌套对象中的多个项

3

如何在MongoDB中通过ID更新一些嵌套对象。

在下面的情况下,只有第一个项目将被更新!

在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个回答

3

您可以按以下方式操作:

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

1
这个答案对我有用。我不得不将[element]更改为[elem]以匹配数组过滤器。谢谢! - tbowden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接