Hej, teraz myślę, że jedynym sposobem jest dodanie parametru status i użycie operacji findAndModify(), która umożliwia niepodzielną modyfikację dokumentu. Jest trochę wolniejszy, ale powinien wystarczyć.
Załóżmy więc, że dodajesz atrybut statusu i po pobraniu dokumentu zmieniasz status z „BEZCZYNNY” na „PRZETWARZANIE”. Następnie aktualizujesz dokument i zapisujesz go z powrotem w kolekcji, ponownie aktualizując status na „BEZCZYNNY”.
Przykład kodu:
var doc = db.runCommand({
"findAndModify" : "COLLECTION_NAME",
"query" : {"_id": "ID_DOCUMENT", "status" : "IDLE"},
"update" : {"$set" : {"status" : "RUNNING"} }
}).value
Zmień COLLECTION_NAME i ID_DOCUMENT na prawidłową wartość. Domyślnie findAndModify() zwraca starą wartość, co oznacza, że po stronie klienta wartość statusu będzie nadal BEZCZYNNA. Więc kiedy skończysz aktualizować, po prostu zapisz/zaktualizuj wszystko ponownie.
Jedyne, co musisz wiedzieć, to to, że możesz modyfikować tylko jeden dokument na raz.
Mam nadzieję, że to pomoże.