Ei, a única maneira que eu acho agora é adicionar um parâmetro de status e usar a operação findAndModify(), que permite modificar atomicamente um documento. É um pouco mais lento, mas deve funcionar.
Então, digamos que você adicione um atributo de status e, ao recuperar o documento, altere o status de "IDLE" para "PROCESSING". Em seguida, você atualiza o documento e o salva novamente na coleção, atualizando o status para "IDLE" novamente.
Exemplo de código:
var doc = db.runCommand({
"findAndModify" : "COLLECTION_NAME",
"query" : {"_id": "ID_DOCUMENT", "status" : "IDLE"},
"update" : {"$set" : {"status" : "RUNNING"} }
}).value
Altere COLLECTION_NAME e ID_DOCUMENT para um valor adequado. Por padrão, findAndModify() retorna o valor antigo, o que significa que o valor de status ainda será IDLE no lado do cliente. Então, quando você terminar de atualizar, apenas salve/atualize tudo novamente.
A única coisa que você precisa estar ciente é que você só pode modificar um documento por vez.
Espero que ajude.