Я использую драйвер mgo для MongoDB под управлением Go.
Мое приложение запрашивает задачу (только с записью, выбранной в Mongo из коллекции под названием «jobs» ), а затем регистрирует себя в качестве уполномоченного для выполнения этой задачи (обновление той же записи «job», назначая себя правопреемником ).
Программа будет запущена на нескольких машинах, и все они разговаривают с одним и тем же Mongo. Когда моя программа перечисляет доступные задачи, а затем выбирает одну из них, другие экземпляры могли уже получить это назначение, и текущее назначение было бы неудачным.
Как я могу убедиться, что запись, которую я читаю, а затем обновляю, имеет или не имеет определенное значение (в данном случае правопреемник )во время обновления?
Я пытаюсь получить одно задание, независимо от того, какое, поэтому я думаю, что мне следует сначала выбрать отложенную задачу и попытаться назначить ее, сохранив ее на тот случай, если обновление прошло успешно.
Итак, мой запрос должен выглядеть примерно так:
«Из всех записей в коллекции «jobs» обновите только одну , имеющую asignee=null, установив мой идентификатор в качестве правопреемника. Затем дайте мне эту запись , чтобы я мог запустить задание.."
Как я могу выразить это с помощью драйвера mgo для Go?