Il y a beaucoup de réponses ici, mais je veux remplir tous les blancs ici :
Existe-t-il un moyen de mettre à jour atomiquement deux collections dans MongoDB ?
Non. La mise à jour atomique de deux collections est en fait une transaction. MongoDB ne prend pas en charge les transactions entre collections ou même au sein d'une collection.
MongoDB fournit plusieurs modificateurs qui sont atomiques sur un seul document. Vous pouvez donc incrémenter plusieurs variables différentes à la fois ($inc
). Bien qu'il y ait certaines limitations ici, vous ne pouvez pas effectuer deux opérations différentes sur une même propriété.
Existe-t-il un moyen de modifier conditionnellement quelque chose dans une collection en fonction des résultats d'une autre collection en une seule fois ?
Il y a quelques documents ici sur les mises à jour atomiques en général. Cependant, ce dont vous avez vraiment besoin, c'est d'une file d'attente et d'une certaine forme de validation en deux phases ou vous avez besoin de déclencheurs.
Les déclencheurs n'ont pas encore été implémentés, donc ce n'est pas vraiment une option dans votre cas.
Il est possible que le message soit marqué comme lu entre ces actions, alors je diminuerai le nombre de "non lus" de manière incorrecte.
À ce stade, vous disposez de plusieurs stratégies différentes pour que cela se comporte avec un certain niveau de cohérence. Franchement, sur la base de votre description, vous voudrez peut-être envisager de créer une simple file d'attente qui met à jour vos totaux.