Node.js 如何在MongoDB中批量更新值数组?
我有一个要用现有数组更新的值数组。我尝试使用Node.js 如何在MongoDB中批量更新值数组?,node.js,mongodb,Node.js,Mongodb,我有一个要用现有数组更新的值数组。我尝试使用$set它会抛出一个错误。如果我有一个要更新的值数组,它应该更新数组中的匹配项 1.如果我收集了以下文件 表格 [ { "id": 1, "name": "Fresh Mart", "products": [ { "name": "Onion", "qt
$set
它会抛出一个错误。如果我有一个要更新的值数组,它应该更新数组中的匹配项
1.如果我收集了以下文件
表格
[
{
"id": 1,
"name": "Fresh Mart",
"products": [
{
"name": "Onion",
"qty": 10,
"price": "85"
},
{
"name": "Tomato",
"qty": 10,
"price": "85"
}
]
},
{
"id": 2,
"name": "Alfred super market",
"products": [
{
"name": "Onion",
"qty": 10,
"price": "85"
},
{
"name": "Tomato",
"qty": 10,
"price": "85"
}
]
}
]
Following query updates one product in first document:
查询
db.collection.update({
"$and": [
{
id: 1
},
{
"products.name": "Onion"
}
]
},
{
"$set": {
"products.name": "Onion Updated"
}
})
我尝试使用以下查询更新第一个文档中的两个产品:
db.collection.update({
"$and": [
{
id: 1
},
{
"products.name": [ "Onion", "Tomato" ]
}
]
},
{
"$set": {
"products.name": "Onion Updated"
}
})
我使用了$addToSet
它不允许重复。可以将现有值替换为$addToSet
但是它没有更新文档。这个答案就是这个答案的动态方法
- 配置您的有效负载
- 准备
和阵列过滤器
条件设置
- 更新查询
是的,正在工作以及如何更新值的倍数。不,他们采用单个有效负载并更新了多个字段。在这种情况下,我应该采用有效负载的倍数,并应使用这两种蔬菜更新字段的倍数显示查询。不起作用的一个。{“$and”:[{id:1},{“products.name”:[“洋葱”,“西红柿”]}}}您至少需要每个名称的旧名称和更新名称之间的映射。
db.collection.update({
id: 1
},
{
"$addToSet": {
"products": {
"$each": [
{
"name": "Onion Updated",
"qty": 10,
"price": "85"
},
{
"name": "Tomato Updated",
"qty": 10,
"price": "85"
}
]
}
}
})
let id = 1;
let updateName = [
{
oldName: "Onion",
newName: "Onion Updated"
},
{
oldName: "Tomato",
newName: "Tomato Updated"
},
];
let arrayFilters = [];
let set = {};
updateName.forEach((v, i) => {
arrayFilters.push({ ["p"+i]: v.oldName });
set["products.$[p"+i+"].name"] = v.newName;
});
db.collection.update(
{ id: id },
{ $set: set },
{ arrayFilters: arrayFilters }
)