我下面有一个收藏夹。我正在尝试更新数组元素。
我试图更新lineItem _id的值是否为1,然后转到规格列表,如果specName为“ Model”,则将特征值从900更新为50,如您所见,_id也是一个数组。
收集数据:
SecurityContext
相关更新无法按我预期的方式运行。
{
"_id": "100",
"name": "Campaign",
"status": "Active",
"parts": {
"lineItem": [
{
"_id": [
{
"name": "A",
"value": "1"
}
],
"spec": [
{
"specName": "Brand",
"characteristicsValue": [
{
"value": "500"
}
]
},
{
"specName": "Model",
"characteristicsValue": [
{
"value": "900"
}
]
}
]
},
{
"_id": [
{
"name": "B",
"value": "2"
}
],
"spec": [
{
"specName": "Brand",
"characteristicsValue": [
{
"value": "300"
}
]
},
{
"specName": "Model",
"characteristicsValue": [
{
"value": "150"
}
]
}
]
},
{
"_id": [
{
"name": "C",
"value": "2"
}
]
}
]
}
}
编辑: 每个_id都有一个spec数组。因此,我们需要找到_id,然后转到_id数组下的spec,找到品牌并更新值。
答案 0 :(得分:1)
尝试这种方式:
db.Collection.update(
{},
{ $set: { "parts.lineItem.$[outer].spec.$[inner].characteristicsValue" : "50" } },
{ multi: true, arrayFilters: [{"outer._id.value" : "1"}, {"inner.specName" : "Model"}]}
);