Này, cách duy nhất mà tôi nghĩ bây giờ là thêm một tham số trạng thái và sử dụng thao tác findAndModify (), cho phép bạn sửa đổi nguyên tử một tài liệu. Nó chậm hơn một chút, nhưng nên thực hiện thủ thuật.
Vì vậy, giả sử bạn thêm một thuộc tính trạng thái và khi bạn truy xuất tài liệu, hãy thay đổi trạng thái từ "IDLE" thành "PROCESSING". Sau đó, bạn cập nhật tài liệu và lưu lại vào bộ sưu tập, cập nhật trạng thái thành "IDLE" một lần nữa.
Ví dụ về mã:
var doc = db.runCommand({
"findAndModify" : "COLLECTION_NAME",
"query" : {"_id": "ID_DOCUMENT", "status" : "IDLE"},
"update" : {"$set" : {"status" : "RUNNING"} }
}).value
Thay đổi COLLECTION_NAME và ID_DOCUMENT thành một giá trị thích hợp. Theo mặc định findAndModify () trả về giá trị cũ, có nghĩa là giá trị trạng thái sẽ vẫn là IDLE ở phía máy khách. Vì vậy, khi bạn cập nhật xong, chỉ cần lưu / cập nhật lại mọi thứ.
Điều duy nhất bạn cần lưu ý là bạn chỉ có thể sửa đổi một tài liệu tại một thời điểm.
Hy vọng nó sẽ hữu ích.