MongoDB в Go (golang )с mgo :Как обновить запись, узнать, было ли обновление успешным, и получить данные за одну атомарную операцию?

Я использую драйвер mgo для MongoDB под управлением Go.

Мое приложение запрашивает задачу (только с записью, выбранной в Mongo из коллекции под названием «jobs» ), а затем регистрирует себя в качестве уполномоченного для выполнения этой задачи (обновление той же записи «job», назначая себя правопреемником ).

Программа будет запущена на нескольких машинах, и все они разговаривают с одним и тем же Mongo. Когда моя программа перечисляет доступные задачи, а затем выбирает одну из них, другие экземпляры могли уже получить это назначение, и текущее назначение было бы неудачным.

Как я могу убедиться, что запись, которую я читаю, а затем обновляю, имеет или не имеет определенное значение (в данном случае правопреемник )во время обновления?

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

Итак, мой запрос должен выглядеть примерно так:

«Из всех записей в коллекции «jobs» обновите только одну , имеющую asignee=null, установив мой идентификатор в качестве правопреемника. Затем дайте мне эту запись , чтобы я мог запустить задание.."

Как я могу выразить это с помощью драйвера mgo для Go?

10
задан Sebastián Grignoli 10 July 2012 в 16:30
поделиться