【发布时间】:2021-10-20 11:18:52
【问题描述】:
所以我在数据库中有一个文档,看起来像这样:
...
someArray: [{
id: string
qty: number
}]
...
数据库查询需要更新这个单个文档,并为数组中符合某些条件的条目增加“数量”字段的值。
我知道我可以通过多种方式做到这一点,一个(arrayFilters)或多个查询等。但我需要满足以下要求:
-
在我的更新运行时,其他更新操作不得修改此文档。我的理解是,只要我将其作为单个操作(原子更新)执行,MongoDB 4.4 就已经保证了这一点。对吗?
-
每个匹配值都必须更新,否则它们都不应该更新。因此,如果我只能更新数组的 2 个元素并且因为条件失败而没有更新第 3 个元素,我需要还原整个操作。
最好的方法是什么?
我的意思是,事务在这里没有用,因为我只更新一个文档。 此外,如果更新条件失败,这不是错误,因此事务不会恢复。
另一方面,如果我使用多个更新操作来执行此操作,那么另一个更新(由另一个用户启动)可能会修改记录并且我无法恢复。
有没有更好的方法来做到这一点?
提前致谢!
【问题讨论】: