Hej, det enda sättet som jag tror nu är att lägga till en statusparameter och använda operationen findAndModify(), som gör att du kan atomiskt modifiera ett dokument. Det är lite långsammare, men borde göra susen.
Så låt oss säga att du lägger till ett statusattribut och när du hämtar dokumentet ändrar status från "IDLE" till "BEHANDLING". Sedan uppdaterar du dokumentet och sparar det tillbaka till samlingen och uppdaterar statusen till "IDLE" igen.
Kodexempel:
var doc = db.runCommand({
"findAndModify" : "COLLECTION_NAME",
"query" : {"_id": "ID_DOCUMENT", "status" : "IDLE"},
"update" : {"$set" : {"status" : "RUNNING"} }
}).value
Ändra COLLECTION_NAME och ID_DOCUMENT till ett korrekt värde. Som standard returnerar findAndModify() det gamla värdet, vilket betyder att statusvärdet fortfarande är IDLE på klientsidan. Så när du är klar med uppdateringen är det bara att spara/uppdatera allt igen.
Det enda du behöver vara medveten om är att du bara kan ändra ett dokument åt gången.
Hoppas det hjälper.