Как обновить значение и увеличить другое в одиночном запросе, используя mongodb

Есть ли способ добиться следующего:-

MyDocument {
    String docId;
    Integer bal;
    Set<String> actions;
}
  1. Мне нужно обновить действия на поле с некоторым значением действия пользователя, скажем, из

    [a1, a2]
    

    в

    [a1, a2, a3]
    
  2. В то же время это добавленное действие может увеличивать 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] При наличии нескольких таких одновременных запросов оправдана ли проблема?

Дайте мне знать, какие-либо дополнительные детали требуются.

0 ответов

Другие вопросы по тегам