Тук има много отговори, но искам да попълня всички празни места тук:
Има ли начин за атомарно актуализиране на две колекции в MongoDB?
Не. Атомната актуализация на две колекции на практика е транзакция. MongoDB не поддържа транзакции между колекции или дори в колекция.
MongoDB предоставя няколко модификатора, които са атомарни в един документ. Така че можете да увеличите няколко различни променливи наведнъж ($inc
). Въпреки че тук има някои ограничения, не можете да изпълнявате две различни операции върху едно свойство.
Има ли начин да промените условно нещо в една колекция въз основа на резултатите от друга колекция в един кадър?
Тук има някои документи за атомните актуализации като цяло. Това, от което наистина се нуждаете обаче, е опашка и някаква форма на двуфазно комитиране или имате нужда от тригери.
Тригерите все още не са внедрени, така че всъщност не е опция във вашия случай.
Има възможност съобщението да бъде маркирано като прочетено между тези действия, след което ще намаля неправилно броя на „непрочетените“.
В този момент имате няколко различни стратегии, за да направите това поведение с известно ниво на последователност. Честно казано, въз основа на вашето описание може да искате да проучите изграждането на проста опашка, която актуализира общите ви суми.