ここにはたくさんの答えがありますが、ここにすべての空欄を埋めたいと思います:
MongoDBの2つのコレクションをアトミックに更新する方法はありますか?
いいえ。2つのコレクションのアトミック更新は事実上トランザクションです。 MongoDBは、コレクション間またはコレクション内のトランザクションをサポートしていません。
MongoDBは、単一のドキュメントでアトミックないくつかの修飾子を提供します。したがって、一度に複数の異なる変数をインクリメントできます($inc
)。ここにはいくつかの制限がありますが、1つのプロパティに対して2つの異なる操作を実行することはできません。
ワンショットで他のコレクションの結果に基づいて、あるコレクションの何かを条件付きで変更する方法はありますか?
一般的なアトミックアップデートに関するいくつかのドキュメントがここにあります。ただし、実際に必要なのは、キューと何らかの形式の2フェーズコミットであるか、トリガーが必要です。
トリガーはまだ実装されていないため、実際にはオプションではありません。
これらのアクションの間にメッセージが既読としてマークされる可能性があります。そうすると、「未読」の数が誤って減少します。
この時点で、これをある程度の一貫性で動作させるための2つの異なる戦略があります。率直に言って、あなたの説明に基づいて、合計を更新する単純なキューの構築を調査することをお勧めします。