Jest tu wiele odpowiedzi, ale chcę wypełnić wszystkie puste pola:
Czy istnieje sposób na atomową aktualizację dwóch kolekcji w MongoDB?
Nie. Atomowa aktualizacja dwóch kolekcji jest de facto transakcją. MongoDB nie obsługuje transakcji między kolekcjami ani nawet w ramach kolekcji.
MongoDB udostępnia kilka modyfikatorów, które są niepodzielne w jednym dokumencie. Możesz więc zwiększyć kilka różnych zmiennych jednocześnie ($inc
). Chociaż istnieją tutaj pewne ograniczenia, nie można wykonać dwóch różnych operacji na jednej właściwości.
Czy istnieje sposób na warunkową zmianę czegoś w jednej kolekcji na podstawie wyników innej kolekcji w jednym ujęciu?
Jest tutaj kilka dokumentów dotyczących ogólnych aktualizacji atomowych. Jednak naprawdę potrzebujesz kolejki i jakiejś formy zatwierdzania dwufazowego lub potrzebujesz wyzwalaczy.
Wyzwalacze nie zostały jeszcze zaimplementowane, więc w twoim przypadku nie jest to opcja.
Istnieje możliwość, że wiadomość zostanie oznaczona jako przeczytana pomiędzy tymi czynnościami, wtedy niepoprawnie zmniejszę liczbę „nieprzeczytanych”.
W tym momencie masz kilka różnych strategii, aby to zachowywało się z pewnym poziomem spójności. Szczerze mówiąc, na podstawie twojego opisu możesz zbadać tworzenie prostej kolejki, która aktualizuje twoje sumy.