La fonctionnalité clé de MongoDB dans ce domaine est qu'une mise à jour vers un single le document est atomique. Depuis la documentation :
Donc pour votre mise à jour de :
db.collection.update({done: false, taken: false},{$set: {taken: true, takenBy: myIp}});
cela signifie qu'il trouvera atomiquement un document correspondant aux critères, puis le mettra à jour. Alors oui, cela fonctionnera bien pour assigner une tâche à un serveur donné.
Voir cet autre message
pour plus de détails sur la mise en œuvre d'une file d'attente de travail partagée dans MongoDB. Un point clé qui y est mentionné est l'utilisation de findAndModify
pour effectuer à la fois la mise à jour et renvoie le document mis à jour.