Иногда мы хотим сохранить некоторые объекты, не связанные напрямую друг с другом. Сбои могут возникнуть на одном или нескольких из них. Если нет стратегии «транзакции», как мы можем сохранить все или ничего?
Потому что Mongodb не поддерживает транзакции.MongoDB обеспечивает атомарность для операции над одним документом.Узнайте, почему здесь и здесь .
Я не вхожу в Mongoid, но если нет такой вещи, как транзакция, вы могли бы просто проверить, не является ли какой-либо из объектов #valid?, и если это так, просто не сохранить все объекты.
#valid?
Начиная с 3.6, MongoDB предоставляет session
session
s = Mongoid.client(:default).start_session s.start_transaction s.commit_transaction
Подробную информацию о классе Session можно найти здесь
Вы не можете.Если это сложное требование, вам придется либо встраивать связанные объекты друг в друга, чтобы их можно было модифицировать с помощью атомарных обновлений, либо вам нужно будет найти другое решение для обеспечения устойчивости.MongoDB делает много вещей хорошо, но транзакции - не одна из этих вещей.