Можно ли выполнить несколько операций с БД в одной транзакции в MongoDB?
Предположим, у меня есть две коллекции A
а также B
Я хочу сделать операцию
db.A.remove({_id:1});
db.B.insert({_id:"1","name":"dev"})
Я знаю, что MongoDB поддерживает атомарность на уровне документов. Можно ли выполнить вышеуказанный набор операций в одной транзакции?
2 ответа
Да, теперь это возможно!
В MongoDB уже давно есть операции атомарной записи на уровне одного документа. Но MongoDB не поддерживал такую атомарность в случае операций с несколькими документами до тех пор, пока
v4.0.0
. Многодокументные операции теперь носят атомарный характер благодаря выпуску транзакций MongoDB.
Я рекомендую вам прочитать это и это, чтобы лучше понять, как пользоваться!
MongoDB не может гарантировать атомарность, когда задействовано более одного документа.
Кроме того, MongoDB не предлагает каких-либо отдельных операций, которые затрагивают более одной коллекции.
Когда вы хотите сделать то, что вы действительно хотите сделать атомарно, вам нужно объединить коллекции A и B в одну коллекцию. Помните, что MongoDB - это база данных без схемы. Вы можете хранить документы разных типов в одной коллекции и выполнять отдельные атомарные операции обновления, которые выполняют несколько изменений в документе. Это означает, что одно обновление может преобразовать документ типа A в документ типа B.
Чтобы различать разные типы в одной коллекции, вы можете иметь type
поле и добавьте это ко всем вашим запросам, или вы могли бы использовать типизацию утки и идентифицировать типы, проверяя, если определенное поле $exists
,