単一の mongodb ドキュメントをロックできないことはわかっています。実際、コレクションをロックする方法もありません。
ただし、このシナリオでは、複数のスレッド (またはプロセス、重要ではありません) がドキュメントを変更するのを防ぐ方法が必要だと思います。これが私のシナリオです。
タイプ A のオブジェクトを含むコレクションがあります。タイプ A のドキュメントを取得し、ドキュメントのプロパティである要素を配列に追加し ( a.arr.add(new Thing()
)、ドキュメントを mongodb に保存するコードがあります。このコードは並列であり、私のアプリケーションの複数のスレッドがこれらの操作を実行できます。今のところ、スレッドが同じドキュメントに対してこれらの操作を並行して実行するのを防ぐ方法はありません。スレッドの 1 つが他のスレッドの作業を上書きする可能性があるため、これは良くありません。
私はリポジトリ パターンを使用して mongodb コレクションへのアクセスを抽象化しているため、私の処分では CRUD 操作しかありません。
考えてみると、問題を引き起こしているのはmongodbの制限ではなく、リポジトリパターンの制限である可能性があります。とにかく、どうすればこのコードを「スレッドセーフ」にできますか? この問題にはよく知られた解決策があると思いますが、mongodb とリポジトリ パターンは初めてなので、すぐにはわかりません。
ありがとう