Как обновить значение и увеличить другое в одиночном запросе, используя mongodb
Есть ли способ добиться следующего:-
MyDocument {
String docId;
Integer bal;
Set<String> actions;
}
Мне нужно обновить действия на поле с некоторым значением действия пользователя, скажем, из
[a1, a2]
в
[a1, a2, a3]
В то же время это добавленное действие может увеличивать
bal
по некоторому значению, поэтому мне нужно убедиться, что$inc
Операция также осуществляется дляbal
поле.
Одним из способов достижения этого я мог придумать увеличение 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]
При наличии нескольких таких одновременных запросов оправдана ли проблема?
Дайте мне знать, какие-либо дополнительные детали требуются.