Hei, satu-satunya cara yang saya pikir sekarang adalah menambahkan parameter status dan menggunakan operasi findAndModify(), yang memungkinkan Anda untuk memodifikasi dokumen secara atom. Ini sedikit lebih lambat, tetapi harus berhasil.
Jadi katakanlah Anda menambahkan atribut status dan ketika Anda mengambil dokumen, ubah status dari "IDLE" menjadi "PROCESSING". Kemudian Anda memperbarui dokumen dan menyimpannya kembali ke koleksi memperbarui status menjadi "IDLE" lagi.
Contoh kode:
var doc = db.runCommand({
"findAndModify" : "COLLECTION_NAME",
"query" : {"_id": "ID_DOCUMENT", "status" : "IDLE"},
"update" : {"$set" : {"status" : "RUNNING"} }
}).value
Ubah COLLECTION_NAME dan ID_DOCUMENT ke nilai yang sesuai. Secara default findAndModify() mengembalikan nilai lama, yang berarti nilai status akan tetap IDLE di sisi klien. Jadi setelah Anda selesai memperbarui, simpan/perbarui semuanya lagi.
Satu-satunya pemikiran yang perlu Anda ketahui adalah bahwa Anda hanya dapat mengubah satu dokumen dalam satu waktu.
Semoga membantu.