Вы добавляете простое поле editor
и убедитесь, что каждый процесс владеет документом при наступлении времени его обновления.
Вот простой пример:
let processId = uniqueID;
//if doc is none then a different process 'owns' it. need to decide on behaviour.
let doc = await collection.findOneAndUpdate({_id: docId, editor: {$exists: false}}, {$set: {editor: processId}})
### do calculations. ###
let newValue = calculatedValue;
let newDoc = await collection.findOneAndUpdate({_id: docId, editor: processId}, {$unset: {editor: ""}})
Я чувствую что использование транзакций в качестве suggjested в комментариях является излишним, из документов:
В MongoDB операция над одним документом является atomi c
И
Для ситуаций, требующих атомарности чтения и записи в несколько документов, MongoDB поддерживает транзакции с несколькими документами.
Транзакции предназначены для более сложных ситуаций. чем это, и я чувствую, что эти накладные расходы не нужны, так как достаточно простого решения.