Sto usando il driver mgo per MongoDB sotto Go.MongoDB in Go (golang) con mgo: come posso aggiornare un record, scoprire se l'aggiornamento ha avuto successo e ottenere i dati in una singola operazione atomica?
La mia applicazione richiede un'attività (con solo una selezione record in Mongo da una raccolta denominata "lavori") e quindi si registra come destinatario per completare tale attività (un aggiornamento per lo stesso record "processo", impostandosi come assegnatario).
Il programma sarà eseguito su diverse macchine, tutte che parlano con lo stesso Mongo. Quando il mio programma elenca le attività disponibili e ne sceglie una, altre istanze potrebbero aver già ottenuto quell'assegnazione e l'assegnazione corrente sarebbe fallita.
Come posso essere sicuro che il record che ho letto e che aggiorni faccia o non abbia un determinato valore (in questo caso, un assegnatario) al momento dell'aggiornamento?
Sto cercando di ottenere un compito, non importa quale, quindi penso che prima dovrei selezionare un compito in sospeso e provare ad assegnarlo, mantenendolo nel caso che l'aggiornamento abbia avuto successo.
Quindi, la mia domanda dovrebbe essere qualcosa di simile:
"Da tutti i record in 'posti di lavoro' di raccolta, aggiornare solo che ha asignee = null, impostando il mio ID come cessionario Poi, dammi. quel record così ho potuto eseguire il lavoro. "
Come potrei esprimerlo con il driver mgo per Go?
In realtà, la soluzione di cui ho bisogno è quella offerta da tux21b. Devo ritirare tutte le "opzioni", quindi selezionarne una, quindi provare ad assegnarla a me stesso. Se non riuscissi, proverei con un altro. –
Perché è necessario selezionare TUTTE le opzioni? Hai detto che devi solo selezionare quello che non è stato preso (aka assignee == null)? –
Hai ragione. Le mie esigenze si sono rivelate diverse da quelle che pensavo quando ho scritto la domanda, ma la tua risposta risponde meglio alla domanda. –