Je suis un peu confus par la findAndModify
méthode de MongoDB. Quel est l'avantage par rapport à la update
méthode? Pour moi, il semble que cela retourne simplement l'élément en premier, puis le met à jour. Mais pourquoi dois-je d'abord retourner l'article? J'ai lu le MongoDB: le guide définitif et il dit qu'il est pratique pour manipuler les files d'attente et effectuer d'autres opérations qui nécessitent une atomicité de style get-and-set. Mais je n'ai pas compris comment il y parvient. Quelqu'un peut-il m'expliquer cela?
175
findAndModify
garantit-il qu'aucune autre opération de mise à jour ne l'interférera?findAndModify
renvoie le document, la mise à jour ne le fait pas.Si j'ai bien compris Dwight Merriman (l'un des auteurs originaux de mongoDB), utiliser update pour modifier un seul document ie ("multi": false} est également atomique. Actuellement, cela devrait aussi être plus rapide que de faire la mise à jour équivalente en utilisant
findAndModify
.la source
À partir de la documentation MongoDB (emphase ajoutée):
la source
findAndModify()
par défaut ne modifie qu'un seul document etupdate()
puisse mettre à jour un ou plusieurs documents, lorsque j'utilise unarrayFilters
,findAndModify()
met à jour toutes les correspondances. C'est peut-être un bug ??Les compteurs et les cas similaires sont une classe utile de cas d'utilisation. Par exemple, jetez un œil à ce code (l'un des tests MongoDB): find_and_modify4.js .
Ainsi, avec
findAndModify
vous incrémentez le compteur et obtenez sa valeur incrémentée en une seule étape. Comparez: si vous (A) effectuez cette opération en deux étapes et que quelqu'un d'autre (B) fait la même opération entre vos étapes, A et B peuvent obtenir la même dernière valeur de compteur au lieu de deux différentes (juste un exemple de problèmes possibles).la source
Nous avons utilisé findAndModify () pour les opérations de comptage (inc ou dec) et d'autres champs uniques mutent les cas. En migrant notre application de Couchbase vers MongoDB, j'ai trouvé cette API pour remplacer le code qui fait GetAndlock (), modifier le contenu localement, replace () pour enregistrer et Get () à nouveau pour récupérer le document mis à jour. Avec mongoDB, je viens d'utiliser cette API unique qui renvoie le document mis à jour.
la source