Богатые запросы MongoDB и гарантии изоляции
Похоже, мы можем сделать это с MongoDB 4.0: https://docs.mongodb.com/master/core/transactions/?_ga=2.98680029.215960757.1535643945-1204416970.1535643943
MongoDB предоставляет возможность выполнять транзакции с несколькими документами с использованием наборов реплик. Операции с несколькими документами могут использоваться для нескольких операций, коллекций, баз данных и документов. Операции с несколькими документами предоставляют предложение "все или ничего". Когда транзакция совершается, все изменения данных, сделанные в транзакции, сохраняются. Если какая-либо операция в транзакции завершается с ошибкой, транзакция прерывается и все изменения данных, сделанные в транзакции, отбрасываются, не становясь видимыми. До совершения транзакции операции транзакции в транзакции не видны вне транзакции.
Некоторые примеры в Java: https://spring.io/blog/2018/06/28/hands-on-mongodb-4-0-transactions-with-spring-data
Кажется, что в java вы можете настроить его для управления транзакциями с помощью аннотации @Transactional, например, в Hibernate. Просто имейте в виду, что обычно использование транзакций приносит дополнительную стоимость исполнения.
В большинстве случаев транзакция с несколькими документами требует больших затрат на производительность при записи отдельных документов, а доступность транзакций с несколькими документами не должна быть заменой для эффективного проектирования схемы.
С моей личной точки зрения, я бы не пошел на монго, если вам нужно много полагаться на транзакции.