单个更新查询更新单个文档(包含子数组文档)?
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);
我在数据库中有一个现有文档:
计划集合(在数据库中):
{ _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);