Я пытаюсь реализовать оператор $ setOnInsert с параметром upsert
, установленным на true
.Это делается для того, чтобы предотвратить создание документа, если документ уже существует, не следует обновлять.
Чтобы найти существующий документ, поиск можно выполнить по любому из свойств документа.Из-за этого я не могу просто пойти и создать уникальные индексы для всех моих свойств документа.Исходя из моего понимания, запрос и создание не являются атомарными, и можно создавать дубликаты .
Мой вопрос заключается в том, как сделать upsert
атомарным без уникальных индексов?Поскольку документации по этому сценарию нет, разве мне не повезло с этим требованием?
MongoDB ввел транзакции.Можем ли мы использовать транзакции в сочетании с upsert: true
для принудительного выполнения атомарной операции как с запросом, так и с созданием?К сожалению, читая документацию по транзакциям, я не смог найти ответ.