Hej, jediný způsob, jak si teď myslím, je přidat parametr status a použít operaci findAndModify(), která vám umožní atomicky upravit dokument. Je to trochu pomalejší, ale mělo by to stačit.
Řekněme tedy, že přidáte atribut stavu a při načítání dokumentu změníte stav z „NEČINNÁ“ na „ZPRACOVÁVÁ SE“. Poté dokument aktualizujete a uložíte zpět do kolekce, přičemž stav se znovu změní na „NEČINNÝ“.
Příklad kódu:
var doc = db.runCommand({
"findAndModify" : "COLLECTION_NAME",
"query" : {"_id": "ID_DOCUMENT", "status" : "IDLE"},
"update" : {"$set" : {"status" : "RUNNING"} }
}).value
Změňte COLLECTION_NAME a ID_DOCUMENT na správnou hodnotu. Ve výchozím nastavení funkce findAndModify() vrací starou hodnotu, což znamená, že hodnota stavu bude na straně klienta stále NEČINNÁ. Takže až budete s aktualizací hotovi, vše znovu uložte/aktualizujte.
Jediné, co si musíte být vědomi, je, že můžete upravovat pouze jeden dokument najednou.
Doufám, že to pomůže.