Node.js と MongoDB/Mongoose を使用して Web アプリケーションを開発しています。最もよく使用されるモデルである Record には、多くのサブドキュメント配列があります。たとえば、「コメント」、「予約」、「購読者」などがあります。
クライアント側のアプリケーションでは、ユーザーが「削除」ボタンを押すたびに、その特定のコメントの削除ルートへの AJAX 要求が開始されます。私が直面している問題は、これらの AJAX 呼び出しの多くが一度に着信すると、Mongoose が呼び出しの一部 (すべてではない) で「ドキュメントが見つかりません」というエラーで失敗することです。
これは、一度に多数の呼び出しが迅速に行われた場合にのみ発生します。これは、Mongoose のバージョンが原因でドキュメントの競合が発生したためだと思います。現在の削除プロセスは次のとおりです。
- を使用してドキュメントを取得します
Record.findById()
- 適切な配列からサブドキュメントを削除します(たとえば、を使用
comment.remove()
) - 電話
record.save()
オペレーターRecord.findByIdAndUpdate
を使用してコレクションを手動で更新できるソリューションを見つけました。$pull
ただし、これは、mongoose のミドルウェアを使用できず、バージョン管理が完全に失われることを意味します。そして、考えれば考えるほど、これが発生する状況に気づき、findByIdAndUpdate
またはのようなMongooseのラッパー関数を使用する必要がありfindAndRemove
ます。私が考えることができる他の唯一の解決策は、削除の試行をwhile
ループに入れて、それが機能することを期待することですが、これは非常に貧弱な修正のようです.
Mongoose ラッパーを使用しても、基本的には Mongoose を使用する大きな利点の 1 つであるミドルウェアやフックをまったく使用できないため、問題は解決しません。
これは、Mongoose は基本的に高速編集には役に立たず、ネイティブの MongoDB ドライバーを使用した方がよいということですか? Mongoose の制限を誤解していますか? どうすればこの問題を解決できますか?