Невозможно заблокировать документ mongodb. Что если мне нужно?
Я знаю, что не могу заблокировать один документ mongodb, фактически, также нет способа заблокировать коллекцию.
Однако у меня есть такой сценарий, в котором, как мне кажется, мне нужен какой-то способ предотвратить изменение документа более чем одним потоком (или процессом, это не важно). Вот мой сценарий.
У меня есть коллекция, которая содержит объект типа А. У меня есть некоторый код, который извлекает документ типа А, добавить элемент в массив, который является свойством документа (a.arr.add(new Thing()
) и затем сохраните документ обратно в mongodb. Этот код параллелен, несколько потоков в моих приложениях могут выполнять эти операции, и на данный момент нет способа помешать потокам выполнять эти операции параллельно в одном и том же документе. Это плохо, потому что один из потоков может перезаписать работы другого.
Я использую шаблон репозитория, чтобы абстрагировать доступ к коллекции mongodb, поэтому в моем распоряжении есть только операции CRUD.
Теперь, когда я думаю об этом, может быть, это ограничение шаблона репозитория, а не ограничение mongodb, которое доставляет мне неприятности. В любом случае, как я могу сделать этот код "потокобезопасным"? Я думаю, что есть хорошо известное решение этой проблемы, но, будучи новичком в mongodb и в шаблоне репозитория, я не сразу его вижу.
Спасибо