Estoy usando el controlador mgo para MongoDB bajo Go.MongoDB en Go (golang) con mgo: ¿Cómo actualizo un registro, descubro si la actualización fue exitosa y obtengo los datos en una sola operación atómica?
Mi aplicación solicita una tarea (con solo un registro seleccione en Mongo de una colección llamada "trabajos") y luego se registra como un candidato para completar esa tarea (una actualización del mismo registro de "trabajo", configurándose como cesionario).
El programa se ejecutará en varias máquinas, todas hablando con el mismo Mongo. Cuando mi programa enumera las tareas disponibles y luego elige una, es posible que otras instancias ya hayan obtenido esa asignación y la asignación actual haya fallado.
¿Cómo puedo asegurarme de que el registro que leo y luego actualizo tiene o no un cierto valor (en este caso, un destinatario) en el momento de la actualización?
Estoy tratando de obtener una tarea, no importa cuál sea, así que creo que primero debería seleccionar una tarea pendiente e intentar asignarla, manteniéndola solo en el caso de que la actualización fuera exitosa.
lo tanto, mi consulta debe ser algo como:
"De todos los registros en la recopilación 'empleos', actualizar sólo una que tiene asignee = null, el establecimiento de identificación para el cesionario Entonces, dame. ese registro para poder ejecutar el trabajo ".
¿Cómo podría expresar eso con el controlador mgo para Go?
En realidad, la solución que necesito es la que tux21b ofrece. Necesito volver a seleccionar todas las "opciones", seleccionar una y luego intentar asignarla a mí mismo. Si no tiene éxito, lo probaría con otro. –
¿Por qué necesita seleccionar TODAS las opciones? ¿Dijiste que solo necesitas seleccionar eso que no se tomó (también conocido como assignee == null)? –
Tienes razón. Mis necesidades resultaron ser diferentes de lo que pensé cuando escribí la pregunta, pero su respuesta se ajusta mejor a la pregunta. –