Почему в Mongoid нет метода «транзакции»? - PullRequest
2 голосов
/ 02 ноября 2011

Иногда мы хотим сохранить некоторые объекты, не связанные напрямую друг с другом. Сбои могут возникнуть на одном или нескольких из них. Если нет стратегии «транзакции», как мы можем сохранить все или ничего?

Ответы [ 4 ]

4 голосов
/ 02 ноября 2011

Потому что Mongodb не поддерживает транзакции.MongoDB обеспечивает атомарность для операции над одним документом.Узнайте, почему здесь и здесь .

2 голосов
/ 02 ноября 2011

Я не вхожу в Mongoid, но если нет такой вещи, как транзакция, вы могли бы просто проверить, не является ли какой-либо из объектов #valid?, и если это так, просто не сохранить все объекты.

1 голос
/ 09 января 2019

Начиная с 3.6, MongoDB предоставляет session

s = Mongoid.client(:default).start_session
s.start_transaction
s.commit_transaction

Подробную информацию о классе Session можно найти здесь

1 голос
/ 02 ноября 2011

Вы не можете.Если это сложное требование, вам придется либо встраивать связанные объекты друг в друга, чтобы их можно было модифицировать с помощью атомарных обновлений, либо вам нужно будет найти другое решение для обеспечения устойчивости.MongoDB делает много вещей хорошо, но транзакции - не одна из этих вещей.

...