Mongoose のバージョン管理は、主にサブドキュメント配列の問題を回避することを目的としていることを理解しています。ただし、この機能を利用して、ドキュメントの更新の競合を回避することもできますか? つまり、2 人のユーザーが同じドキュメントを同時に更新します。
理想的には、私がやりたいことは次のようなものです:
- find() を使用してドキュメントを取得し、バージョンが期待されるバージョン (If-Match ヘッダーでクライアントから送信されたもの) と一致することを確認します。
- その場合は、ドキュメントの更新に進みます。
- save() で、(1) 以降にバージョンが変更されている場合は失敗します。
setTimeout() を 1 と 2 の間に置いてから、手動で__vを 3 の直前に更新しても、保存は成功します。これは、Mongoose が、この場合の更新に version 句を含める必要はないと考えているためだと思います。
また、save()の前にincrement()を呼び出してみました。これにより、保存操作中にバージョンがインクリメントされると想定しましたが、バージョンがインクリメントされているように見えますが、保存時にDBの内容と一致しません(明らかにそうではありません)。
ミドルウェアを使用して自分でバージョン管理を実装した方がよいでしょうか?