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