Хей, единственият начин, за който мисля сега, е да добавите параметър на състоянието и да използвате операцията findAndModify(), която ви позволява да променяте атомарно документ. Това е малко по-бавно, но трябва да свърши работа.
Така че да кажем, че добавяте атрибут за състояние и когато извличате документа, променяте състоянието от „ДЕЙСТВИЯ“ на „ОБРАБОТА“. След това актуализирате документа и го запазвате обратно в колекцията, като отново актуализирате състоянието на „IDLE“.
Пример за код:
var doc = db.runCommand({
"findAndModify" : "COLLECTION_NAME",
"query" : {"_id": "ID_DOCUMENT", "status" : "IDLE"},
"update" : {"$set" : {"status" : "RUNNING"} }
}).value
Променете COLLECTION_NAME и ID_DOCUMENT на правилна стойност. По подразбиране findAndModify() връща старата стойност, което означава, че стойността на състоянието ще бъде все още IDLE от страна на клиента. Така че, когато приключите с актуализирането, просто запазете/актуализирайте всичко отново.
Единственото, което трябва да имате предвид, е, че можете да променяте само един документ в даден момент.
Надявам се да помогне.