C'est vraiment un peu large mais je peux offrir les grandes lignes. Depuis MongoDB utilise verrouillage au niveau de la collection avec le moteur de stockage par défaut. Il existe également le moteur de stockage WiredTiger disponible qui implémente verrouillage au niveau du document . Mais fondamentalement, dans toutes les versions, il existe un certain niveau de "verrouillage" qui se produit à chaque demande. Plus le niveau est fin, mieux c'est en fonction de vos besoins réels en matière de débit.
Essentiellement, deux demandes ne se produisent pas en même temps car elles "bloqueront" le verrou effectué jusqu'à ce qu'il soit libéré. Ainsi, la valeur qui serait renvoyée (par exemple, un findAndModify()
request ), serait à partir de "l'état actuel" au moment où cette demande a été faite.
Ainsi, sur une telle demande, l'instruction qui a été exécutée en premier renverrait une valeur de 2, et la prochaine instruction exécutée renverrait une valeur de 3. La position finale dans la base de données est que la valeur serait actuellement 3.
Il n'y a donc aucun moyen que quelque chose puisse "modifier" en même temps, et l'état final serait celui qui se produit après que "toutes" les demandes ont été émises. Donc $inc
et les autres opérateurs font exactement ce qu'ils doivent faire et modifient le contenu en fonction de l'état du document au moment où ils ont pu y accéder.