Java 如何在mongodb上查找和更新对象中的嵌套数组元素
我下面有一个收藏。我正在尝试更新数组元素 我试图更新lineItem _id值是否为1,然后转到spec list,如果specName为“Model”,则将characteristicsValue从900更新为50,如您所见,_id也是一个数组 收集数据:Java 如何在mongodb上查找和更新对象中的嵌套数组元素,java,mongodb,mongodb-update,Java,Mongodb,Mongodb Update,我下面有一个收藏。我正在尝试更新数组元素 我试图更新lineItem _id值是否为1,然后转到spec list,如果specName为“Model”,则将characteristicsValue从900更新为50,如您所见,_id也是一个数组 收集数据: { "_id": "100", "name": "Campaign", "status": "Active", "parts": { "lineItem": [
{
"_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"
}
]
}
]
}
}
相关更新没有像我预期的那样工作
db.Collection.update({"parts.lineItem._id.value" : "1",
"parts.lineItem.spec.specName" : "Model" },{ $set: {
"parts.lineItem.spec.$.characteristicsValue" : "50" } })
编辑:
每个_id都有一个等级库数组。因此,我们需要找到_id,然后转到_id数组下的spec,找到品牌并更新值。尝试以下方法:
db.Collection.update(
{},
{ $set: { "parts.lineItem.$[outer].spec.$[inner].characteristicsValue" : "50" } },
{ multi: true, arrayFilters: [{"outer._id.value" : "1"}, {"inner.specName" : "Model"}]}
);
错误是:为了应用数组更新,文档中必须存在路径“parts.lineItem.0.spec”。因为,有些lineItem元素没有spec,只是有些有itOk。有了这些新信息,我更新了答案。请再试一次。=)