Hey, die einzige Möglichkeit, die ich jetzt denke, besteht darin, einen Statusparameter hinzuzufügen und die Operation findAndModify() zu verwenden, mit der Sie ein Dokument atomar ändern können. Es ist etwas langsamer, sollte aber ausreichen.
Nehmen wir also an, Sie fügen ein Statusattribut hinzu und ändern beim Abrufen des Dokuments den Status von „IDLE“ auf „IN PROCESSING“. Dann aktualisieren Sie das Dokument und speichern es wieder in der Sammlung, indem Sie den Status wieder auf "IDLE" setzen.
Codebeispiel:
var doc = db.runCommand({
"findAndModify" : "COLLECTION_NAME",
"query" : {"_id": "ID_DOCUMENT", "status" : "IDLE"},
"update" : {"$set" : {"status" : "RUNNING"} }
}).value
Ändern Sie COLLECTION_NAME und ID_DOCUMENT in einen geeigneten Wert. Standardmäßig gibt findAndModify() den alten Wert zurück, was bedeutet, dass der Statuswert auf der Clientseite immer noch IDLE ist. Wenn Sie also mit der Aktualisierung fertig sind, speichern/aktualisieren Sie einfach alles erneut.
Das Einzige, was Sie beachten müssen, ist, dass Sie jeweils nur ein Dokument ändern können.
Hoffe es hilft.