194 votes

ce qui ' s la diff entre findAndModify et mise à jour dans MongoDB ?

Je suis un peu confus par l' findAndModify méthode dans MongoDB. Quel est l'avantage de celui-ci update méthode? Pour moi, il semble qu'elle retourne l'élément en premier et ensuite le mettre à jour.Mais Pourquoi ai-je besoin de retourner l'article premier? J'ai lu la MongoDB: le guide définitif et il dit qu'il est très pratique pour manipuler les files d'attente et d'effectuer d'autres opérations qui ont besoin d'obtenir et de définir le style de l'atomicité. Mais je ne comprends pas comment il y parvient. Quelqu'un peut-il m'expliquer cela?

176voto

Asya Kamsky Points 18076

Si vous extrayez un élément et puis le mettre à jour, il peut y avoir une mise à jour par un autre thread entre ces deux étapes. Si vous mettre à jour un élément premier et ensuite aller la chercher, il peut y avoir une autre mise à jour entre les deux et vous répondrons un élément différent que ce que vous mis à jour.

Ne faire « atomique » de moyens vous avez la garantie que vous avez trouvé retour du même point exact, que vous mettez à jour - c.-à-d. aucune autre opération peut arriver entre les deux.

60voto

Yaniv Points 181

``retourne le document, mise à jour ne fonctionne pas.

Si j’ai bien compris Dwight Merriman (l’un des auteurs originaux de mongoDB), en utilisant update pour modifier un document unique c'est-à-dire ("multi" : false} est aussi atomique. Actuellement, il devrait être plus rapide que de faire la mise à jour équivalente à l’aide `` .

10voto

Roman Kuzmin Points 13913

Une classe de cas d'utilisation est de compteurs et d'autres cas semblables. Par exemple, jetez un oeil à ce code (l'un des MongoDB tests): find_and_modify4.js.

Ainsi, avec findAndModify vous incrémenter le compteur et obtenir son incrémenté valeur en une seule étape. Comparer: si vous (A) d'effectuer cette opération en deux étapes et quelqu'un d'autre (B) fait la même opération entre vos pas puis A et B peuvent obtenir la même valeur de compteur au lieu de deux (juste un exemple parmi d'autres questions).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X