单个更新查询更新单个文档(包含子数组文档)?

Single update query to update a single document (containing subarray documents)?

我在数据库中有一个现有文档:

计划集合(在数据库中):

{ _id: ObjectId('XXX'),
  name: 'Plan A', 
  remark: 'YYY',
  products: [ {name: 'Pdt1', qty: '10'}, 
              {name: 'Pdt2', qty: '20'} ]
}

我需要对 'Plan A' 文档进行更新,其中的产品完全如下(不需要与数据库中的现有产品匹配)如下:

{ _id: ObjectId('XXX'),
  name: 'Plan A',
  remark: 'edited YYY',
  products: [ {name: 'Pdt1', qty: '10'},
              {name: 'Pdt3', qty: '30'},
              {name: 'Pdt4', qty: '40'}  ]

问题:

有没有一种简单的MongoDB方法可以将现有的'Plan A'文档更新为更新其字段+替换数据库中的所有产品子数组?谢谢

如果要替换整个产品子文档,可以在 MongoDb 3.6+

中使用位置所有 $[] 运算符来完成
var filter = {
    name: 'Plan A'
};

var update = {
    $set: {
        'products.$[]': [ 
            {name: 'Pdt1', qty: '10'},
            {name: 'Pdt3', qty: '30'},
            {name: 'Pdt4', qty: '40'}  
        ]
    }
};

var options = {
    multi: true
};

db.collection.update(filter, update, options);