ちょっと私が今思う唯一の方法は、ステータスパラメータを追加し、ドキュメントをアトミックに変更できるようにする操作findAndModify()を使用することです。少し遅いですが、うまくいくはずです。
したがって、ステータス属性を追加し、ドキュメントを取得するときにステータスを「IDLE」から「PROCESSING」に変更するとします。次に、ドキュメントを更新してコレクションに保存し直し、ステータスを「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であることを意味します。したがって、更新が完了したら、すべてを再度保存/更新するだけです。
注意が必要なのは、一度に1つのドキュメントしか変更できないということだけです。
お役に立てば幸いです。