How to implement lock mechanism in mongodb

I have n number of services running and they are all connecting to same db … and I want to implement a lock kind of mechanism in mongo db How can I do that?

I have a collection which contains some documents I want only one services should read a document at a time lock it so other process wont pick that document again. What is the better and correct way of doing this.

Currently I am using findAndModify… as soon as 1 process will pick(it will get by criteria if status is waiting) a document it will change the status filed of that document from waiting to processing . will it work and if yes is it the best solution … will there be any case it will result in deadlock or race condition? What other things I should consider while using findAndModify in this scenario.

Given the guarantees of findAndModify, it works in MOST CASES.

Consider this, what happens if after the modify is done, the response from mongo server fails to reach your app server ? (in this case, this doc is not read by your app code yet, but it will never be returned again by mongo).

The best approach depends on your requirement and tolerance on edge cases. another e.g. is your app code written to process a duplicate read idempotent-ly?

Probably you want to try something based on leasing. E.g. Building Distributed Locks with the DynamoDB Lock Client | AWS Database Blog