MongoDB atomic upsert: true без уникального индекса - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь реализовать оператор $ setOnInsert с параметром upsert, установленным на true.Это делается для того, чтобы предотвратить создание документа, если документ уже существует, не следует обновлять.

Чтобы найти существующий документ, поиск можно выполнить по любому из свойств документа.Из-за этого я не могу просто пойти и создать уникальные индексы для всех моих свойств документа.Исходя из моего понимания, запрос и создание не являются атомарными, и можно создавать дубликаты .

Мой вопрос заключается в том, как сделать upsert атомарным без уникальных индексов?Поскольку документации по этому сценарию нет, разве мне не повезло с этим требованием?

MongoDB ввел транзакции.Можем ли мы использовать транзакции в сочетании с upsert: true для принудительного выполнения атомарной операции как с запросом, так и с созданием?К сожалению, читая документацию по транзакциям, я не смог найти ответ.

...