有没有办法实现以下目标: -
MyDocument {
String docId;
Integer bal;
Set<String> actions;
}
我需要使用某个用户操作值更新字段操作,例如
[a1, a2]
到
[a1, a2, a3]
同时,此添加的操作可以将bal
增加一些值,因此我需要确保bal
字段也实现了$inc
操作。< / p>
实现这一目标的一种方法我可以想到的是使用一个更新查询来增加bal
:
Bson searchFilter = Filters.in("docId", <someId>);
// couldn't find a cleaner way of increment in mongo-java
BasicDBObject modifiedObject = new BasicDBObject();
modifiedObject.put("$inc", new BasicDBObject().append("bal",2)); // any value to increment
mongoCollection.updateOne(searchFilter, modifiedObject);
此后,我可以为actions
更新集合执行另一个更新文档查询。
另一种方式可能一直在用这两个字段更新文档。为此:
find
该文档,阅读当前的bal
,在应用程序中执行计算。update
包含两个计算字段的文档。在上述两种方法中,我都看不到避免两次查询数据库的方法。目前还有其他可行方法可以实现吗?
此外,我担心上述 [UPDATE + UPDATE]
或 [GET + UPDATE]
组合的原子性,因为可能会出现多个此类并发查询,是否有理由担心?
请让我知道所需的任何进一步细节。