如何解决如何修改数组中特定子文档中的字段?
我有一个集合,其中每个文档都有一个包含多个字段的子文档数组。我需要根据其字段更新特定的子文档,但是到目前为止,我所做的每一次尝试都会更改所有排列的子文档中的字段
以下是一些示例数据:
{
'_id' : ObjectId('0001'),'Region' : 'northern',"Items" : [
{
"ItemId" : NumberInt(25),"Name" : "Widget","ProductType" : "15","ItemIdLegacy" : "ca-000037"
},{
"ItemId" : NumberInt(30),"Name" : "Gizmo","ItemIdLegacy" : "ca-000038"
},{
"ItemId" : NumberInt(35),"Name" : "Thingy","ItemIdLegacy" : "ca-000039"
}
]
}
当我尝试对以下查询使用update()时,它将更新所有数组项的ProductType,而不仅仅是我要更改的项。
为澄清起见,我想将ItemIdLegacy:“ ca-000038”的数组项更改为ProductType:20。所有其他Array项应保持不变。我尝试过的查询:
db.Collection.update({"Items.ItemIdLegacy" : "ca-000038"},[{$set: { "Items.ProductType" : "20"} }],{multi: false});
这是所需输出:
{
'_id' : ObjectId('0001'),"ProductType" : "20","ItemIdLegacy" : "ca-000039"
}
]
}
{
'_id' : ObjectId('0001'),"ItemIdLegacy" : "ca-000039"
}
]
}
我觉得我缺少一些简单的东西...
编辑:我有一个问题,可以让我更新数组中的单个匹配元素,但是我需要完成数千个操作,因此一次操作不一定有效(请确保我可以将它们全部解析出来,垃圾邮件到外壳,但我想要更优雅的东西
单个元素更新:
db.Collection.updateOne({"Items.ItemIdLegacy" : "ca-000038"},{ $set: { "Items.$.ProductType" : "20" } } );
解决方法
尝试一下:-
db.collection.update({
"Items.ItemIdLegacy": "ca-000038"
},{
$set: {
"Items.$.ProductType": 20
}
},{
multi: true
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。