Hé, la seule façon dont je pense maintenant est d'ajouter un paramètre de statut et d'utiliser l'opération findAndModify(), qui vous permet de modifier un document de manière atomique. C'est un peu plus lent, mais ça devrait faire l'affaire.
Supposons donc que vous ajoutiez un attribut de statut et que lorsque vous récupérez le document, changez le statut de "IDLE" à "PROCESSING". Ensuite, vous mettez à jour le document et l'enregistrez dans la collection en mettant à nouveau le statut à "IDLE".
Exemple de code :
var doc = db.runCommand({
"findAndModify" : "COLLECTION_NAME",
"query" : {"_id": "ID_DOCUMENT", "status" : "IDLE"},
"update" : {"$set" : {"status" : "RUNNING"} }
}).value
Remplacez COLLECTION_NAME et ID_DOCUMENT par une valeur appropriée. Par défaut, findAndModify() renvoie l'ancienne valeur, ce qui signifie que la valeur d'état sera toujours IDLE côté client. Ainsi, lorsque vous avez terminé la mise à jour, enregistrez/mettez à jour tout à nouveau.
La seule chose à savoir est que vous ne pouvez modifier qu'un seul document à la fois.
J'espère que ça aide.