Je zde mnoho odpovědí, ale chci zde vyplnit všechna prázdná místa:
Existuje nějaký způsob, jak atomicky aktualizovat dvě kolekce v MongoDB?
Ne. Atomová aktualizace dvou kolekcí je ve skutečnosti transakce. MongoDB nepodporuje transakce napříč kolekcemi ani v rámci kolekce.
MongoDB poskytuje několik modifikátorů, které jsou atomické v jednom dokumentu. Můžete tedy zvýšit několik různých proměnných najednou ($inc
). Ačkoli zde existují určitá omezení, nemůžete provádět dvě různé operace na jedné vlastnosti.
Existuje způsob, jak podmínečně změnit něco v jedné kolekci na základě výsledků jiné kolekce najednou?
Zde jsou některé dokumenty o atomových aktualizacích obecně. Co však skutečně potřebujete, je fronta a nějaká forma dvoufázového potvrzení nebo potřebujete spouštěče.
Spouštěče ještě nebyly implementovány, takže to ve vašem případě nepřipadá v úvahu.
Je možné, že mezi těmito akcemi bude zpráva označena jako přečtená, pak nesprávně snížím počet „nepřečtených“.
V tomto okamžiku máte několik různých strategií, jak zajistit, aby se to chovalo s určitou úrovní konzistence. Upřímně řečeno, na základě vašeho popisu možná budete chtít prozkoumat vytvoření jednoduché fronty, která aktualizuje vaše součty.