Здесь есть много ответов, но я хочу заполнить все пробелы здесь:
Есть ли способ атомарно обновить две коллекции в MongoDB?
Нет.Атомарное обновление двух коллекций фактически является транзакцией.MongoDB не поддерживает транзакции между коллекциями или даже внутри коллекции.
MongoDB предоставляет несколько модификаторов , которые являются атомарными в одном документе.Таким образом, вы можете увеличивать несколько различных переменных одновременно ($inc
).Хотя здесь есть некоторые ограничения, вы не можете выполнять две разные операции над одним свойством.
Есть ли способ условно изменить что-то в одной коллекции на основе результатов другой коллекции в одном кадре?
Здесь есть некоторые документы по атомным обновлениям в целом.Однако, что вам действительно нужно, это очередь и некоторая форма двухфазного принятия или вам нужны триггеры.
Триггеры еще не реализованы , так что это не такдействительно вариант в вашем случае.
Существует вероятность, что сообщение будет помечено как прочитанное между этими действиями, тогда я уменьшу число непрочитанных сообщений неправильно.
На данный момент у вас есть несколько различных стратегий, чтобы заставить это вести себя с некоторой степенью согласованности.Откровенно говоря, основываясь на вашем описании, вы можете захотеть исследовать создание простой очереди, которая обновляет ваши итоги.