Невозможно заблокировать документ mongodb. Что, если мне нужно?

Я знаю, что не могу заблокировать один документ mongodb, на самом деле нет способа заблокировать коллекция либо.

Тем не менее, у меня есть такой сценарий, когда мне кажется, что мне нужен какой-то способ предотвратить изменение документа более чем одним потоком (или процессом, это не важно). Вот мой сценарий.

У меня есть коллекция, содержащая объект типа A. У меня есть код, который извлекает документ типа A, добавляет элемент в массив, который является свойством документа ( a.arr.add(new Thing()), а затем сохраните документ обратно в mongodb.Этот код является параллельным, несколько потоков в моих приложениях могут выполнять эти операции, и на данный момент нет способа запретить потокам выполнять эти операции параллельно на одном и том же документ. Это плохо, потому что один из потоков может перезаписать работу другого.

Я использую шаблон репозитория для абстрагирования доступа к коллекции mongodb, поэтому в моем распоряжении есть только операции CRUD.

Теперь что я думаю об этом, может быть, это ограничение шаблона репозитория, а не ограничение mongodb, которое вызывает у меня проблемы. Во всяком случае, как я могу сделать этот код "поточно-безопасным"? Я думаю, что есть известное решение этой проблемы, но, будучи новичком в mongodb и шаблоне репозитория, я не сразу это вижу.

Спасибо

29
задан Mathieu Pagé 2 March 2014 в 14:10
поделиться