mongoose documentaion の findOneAndDelete() および findOneAndRemove() を区別できません。
Query.prototype.findOneAndDelete()
この関数は、findOneAndDelete()コマンドではなく、findOneAndRemove()がMongoDBのfindAndModify()コマンドになるという点でModel.findOneAndRemove()とわずかに異なります。ほとんどのマングースの使用例では、この区別は純粋に意味があります。 正当な理由がない限り、findOneAndDelete()を使用する必要があります。
MongoDBネイティブクライアント(Mongooseは異なります)で{ remove: true }
をfindAndModify
に渡すと、見つかったドキュメントが削除されます。この場合の動作は、findOneAndDelete
と非常によく似ています。ただし、他のオプションを使用する場合にはいくつかの違いがあります。
query
、sort
、doc
(更新オブジェクト)、options
、およびcallback
。 findOneAndDelete は3つだけを取ります(filter
またはクエリ、options
およびcallback
)options
for findAndModify
include w
、wtimeout
、およびj
には、書き込みに関する懸念があります。
「MongoDBからスタンドアロンmongod、レプリカセット、またはシャードクラスタへの書き込み操作のために要求される確認レベル。」または単に書き込み操作の成功を報告するために利用可能なレベルを保証します。
options
のfindOneAndDelete
には、書き込み懸念の構成は含まれません。
findAndModify
を使用すると、新しいドキュメントを返し、同時に削除できます。
例:
// Simple findAndModify command returning the new document and
// removing it at the same time
collection.findAndModify({b:1}, [['b', 1]], {$set:{deleted: Date()}}, {remove:true}, calback)
どちらも同じことを行います(mongodbデータベースからドキュメントを削除します)が、違いはほとんどなく、一般的な有用な違いは、削除後に使用することに興味がある場合、findOneAndRemove()
は削除されたドキュメントを返すことです。
FindOneAndDelete()を使用することをお勧めします。 Mongooseは、ORMを使用してデータを処理する機能と、データベースに「直接書き込む」機能の両方を提供します。findOneAndDelete()は後者の1つです。データベースへの直接書き込みは、ミドルウェアやバリデーターを呼び出さずに、部分的または不完全なデータをデータベースに送信する可能性があるため、より危険です。 more危険だと言ったことに注意してください。完全に危険ではありません。findOneAndDelete()はORM全体に渡って安全性を追加します。
findOneAndRemoveがremoveフラグとfindAndModifyを使用することを除いて、両方ともほぼ同様です。更新を行っているため、時間の複雑さはfindOneAndDeleteと比較して少し高くなります。削除は常に高速です。
findOneAndRemoveは削除されたドキュメントを返すので、後で削除すべきではないと判断したドキュメントを削除した場合、そのドキュメントをdbに挿入し直すことができます。文書を削除する前にロジックが適切であることを確認してから、IMOをチェックすることをお勧めします。
findOneAndDeleteには、更新するドキュメントに影響を与えるために使用できるsortパラメーターがあります。また、どの操作内で完了する必要があるかを制御できるTimeLimitパラメーターもあります。
Mongooseでは、findOneAndDeleteはfindOneAndRemoveと同じように機能します。これらは両方とも、JSONのプロパティでオブジェクトを検索し、次にオブジェクトを削除し、削除後にオブジェクトを返します。データベースfindOneAndDeleteとしてネイティブmongodbを使用している場合、有用かもしれませんが、mongooseの場合は非推奨です。この期間の最新のmongooseおよびnodejs構成に基づいて、findOneAndDeleteを使用して操作を実行することをお勧めします。 https://github.com/Automattic/mongoose/issues/688