Можно ли выполнить несколько операций с БД в одной транзакции в 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,

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