gpt4 book ai didi

MongoDB 2.2 - 更新数组嵌套文档

转载 作者:可可西里 更新时间:2023-11-01 10:44:24 25 4
gpt4 key购买 nike

是否可以使用 $update 和 $elemMatch 更新 Level3 数组中的单个文档字段?我意识到在这种情况下我不能多次使用位置运算符,并且在历史上我已经修改了 Level2 嵌套文档并进行了所需的更深层次的更改,因为这些文档不是很大。我希望有一些语法可以使用 $elemMatch 更新 Level3 数组文档,而无需知道目标文档在 Level3 数组中的位置或包含文档在 Level2 中的位置。

例子:

db.collection.update({_id:'123', level2:{$elemMatch:{'level3.id':'bbb','level3.e1':'hij'}},{'level2.level3.createdDate':new Date()})

{
_id:'123',
f1:'abc',
f2:'def',
level2:[
{_
id:'aaa',
e1:'hij',
e2:'lmo'
level3:[
{
name:'foo',
type:'bar',
createdDate:'2013-3-28T05:18:00'
}]
},
{_
id:'bbb',
e1:'hij',
e2:'lmo'
level3:[
{
name:'foo2',
type:'bar2',
createdDate:'2013-3-28T05:19:00'
}]
}
]
}

最佳答案

由于您提到的原因,目前无法使用常规更新操作来执行此操作。

目前您唯一可以使用的解决方法是向您的文档添加版本控制并通过阅读文档使用乐观锁定,在您的应用程序中找到要修改的适当元素,更改它们的值,然后使用 更新 包含读取文档中的版本(这样,如果其他线程在您的查询和更新之间更新了文档,您将不会覆盖更改,但必须重新加载文档并重试。

版本控制策略不必基于整个文档,您可以对第一级数组元素进行版本控制,然后您就可以只更新您关心的子数组(通过使用 $set 进行更新) .

关于MongoDB 2.2 - 更新数组嵌套文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15692728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com