Używam sterownika mgo dla MongoDB w trybie Go.MongoDB in Go (golang) z mgo: Jak zaktualizować rekord, sprawdzić, czy aktualizacja się powiodła i uzyskać dane w pojedynczej operacji atomowej?
Moja aplikacja prosi o zadanie (z wybranym rekordem w Mongo z kolekcji o nazwie "jobs"), a następnie rejestruje się jako osoba upoważniona do wykonania tego zadania (aktualizacja tego samego rekordu "job", ustawienie się jako cesjonariusz).
Program będzie działał na kilku komputerach, wszystkie rozmawiają z tym samym Mongo. Gdy mój program wyświetli listę dostępnych zadań, a następnie wybierze jedną z nich, inne instancje mogły już uzyskać to zadanie, a bieżące zadanie nie powiodło się.
Jak mogę się upewnić, że rekord, który czytałem, a następnie aktualizuję, ma lub nie ma określonej wartości (w tym przypadku cesjonariusza) w momencie aktualizacji?
Próbuję uzyskać jedno zadanie, bez względu na to, więc myślę, że najpierw powinienem wybrać oczekujące zadanie i spróbować je przypisać, zachowując je w przypadku, gdy aktualizacja zakończyła się pomyślnie.
Więc moje zapytanie powinno być coś takiego:
„ze wszystkich zapisów dotyczących«Jobs»zbieranie, zaktualizuj tylko jeden że ma asignee = null, ustawienie identyfikatora jako cesjonariuszem Potem mi dać. to nagranie, abym mógł wykonać pracę. "
Jak mogę wyrazić to za pomocą sterownika mgo dla Go?
Właściwie to, czego potrzebuję, to jeden z oferowanych tux21b. Muszę odzyskać wszystkie "opcje", a następnie wybrać jedną, a następnie spróbować przypisać ją sobie. Jeśli się nie uda, spróbuję z innym. –
Dlaczego musisz wybrać WSZYSTKIE opcje? Czy powiedziałeś, że musisz wybrać tylko to, co nie zostało podjęte (aka assignee == null)? –
Masz rację. Moje potrzeby okazały się inne niż te, które myślałem, gdy pisałem pytanie, ale twoja odpowiedź lepiej pasuje do tego pytania. –