L'objectif de la clé de version est le verrouillage optimiste.
Lorsqu'elle est activée, la valeur de la version est incrémentée de manière atomique chaque fois qu'un document est mis à jour.
Cela permet à votre code d'application de tester si des modifications ont été apportées entre une récupération (apportant la clé de version 42 par exemple) et une mise à jour conséquente (en s'assurant que la valeur de la version est toujours 42). Si la clé de version a une valeur différente (par exemple, 43 car un mise à jour a été effectuée sur le document), votre code d'application peut gérer la modification simultanée.
Le même concept est souvent utilisé dans les bases de données relationnelles au lieu d'un verrouillage pessimiste qui peut apporter des performances horribles. Tous les ORM décents offrent une telle fonctionnalité. Par exemple, il est bien décrit dans la documentation ObjectDB . C'est une base de données d'objets implémentée en Java mais le même concept s'applique.
Le article de blog lié dans le commentaire de Behlül démontre l'utilité du verrouillage optimiste avec un exemple concret, mais uniquement pour les changements de tableaux, voir ci-dessous.
A l'inverse, voici un cas simple où cela ne sert à rien :un profil utilisateur modifiable par son propriétaire lui-même. Ici, vous pouvez vous débarrasser du verrouillage optimiste et supposer que la dernière modification l'emporte toujours.
Ainsi, vous seul savez si votre application a besoin d'un verrouillage optimiste ou non. Cas d'utilisation par cas d'utilisation.
La situation de Mangouste est un peu particulière.
Le verrouillage optimiste est activé uniquement pour les tableaux car le format de stockage interne utilise l'index de position. C'est le problème décrit par le article de blog
lié dans le commentaire de la question. J'ai trouvé l'explication
donné dans le mongoose-orm
liste de diffusion assez claire :si vous avez besoin d'un verrouillage optimiste pour d'autres champs, vous devez le gérer vous-même.
Voici un essentiel
montrant comment implémenter une stratégie de nouvelle tentative pour un add
opération. Encore une fois, la façon dont vous souhaitez le gérer dépend de vos cas d'utilisation, mais cela devrait suffire pour vous aider à démarrer.
J'espère que cela clarifie les choses.
Bravo