web-dev-qa-db-ja.com

findOneAndDelete()とfindOneAndRemove()の違い

mongoose documentaionfindOneAndDelete() および findOneAndRemove() を区別できません。

Query.prototype.findOneAndDelete()

この関数は、findOneAndDelete()コマンドではなく、findOneAndRemove()がMongoDBのfindAndModify()コマンドになるという点でModel.findOneAndRemove()とわずかに異なります。ほとんどのマングースの使用例では、この区別は純粋に意味があります。 正当な理由がない限り、findOneAndDelete()を使用する必要があります。

24
G4uKu3_Gaurav

MongoDBネイティブクライアント(Mongooseは異なります)で{ remove: true }findAndModifyに渡すと、見つかったドキュメントが削除されます。この場合の動作は、findOneAndDeleteと非常によく似ています。ただし、他のオプションを使用する場合にはいくつかの違いがあります。

  • findAndModify は5つのパラメーターを取ります:querysortdoc(更新オブジェクト)、options、およびcallbackfindOneAndDelete は3つだけを取ります(filterまたはクエリ、optionsおよびcallback
  • options for findAndModify include wwtimeout、およびjには、書き込みに関する懸念があります。

    「MongoDBからスタンドアロンmongod、レプリカセット、またはシャードクラスタへの書き込み操作のために要求される確認レベル。」または単に書き込み操作の成功を報告するために利用可能なレベルを保証します。

    optionsfindOneAndDeleteには、書き込み懸念の構成は含まれません。

  • 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)
1
Moad Ennagi

どちらも同じことを行います(mongodbデータベースからドキュメントを削除します)が、違いはほとんどなく、一般的な有用な違いは、削除後に使用することに興味がある場合、findOneAndRemove()は削除されたドキュメントを返すことです。

0
FouadDev

FindOneAndDelete()を使用することをお勧めします。 Mongooseは、ORMを使用してデータを処理する機能と、データベースに「直接書き込む」機能の両方を提供します。findOneAndDelete()は後者の1つです。データベースへの直接書き込みは、ミドルウェアやバリデーターを呼び出さずに、部分的または不完全なデータをデータベースに送信する可能性があるため、より危険です。 more危険だと言ったことに注意してください。完全に危険ではありません。findOneAndDelete()はORM全体に渡って安全性を追加します。

0
LiamSimpson

findOneAndRemoveがremoveフラグとfindAndModifyを使用することを除いて、両方ともほぼ同様です。更新を行っているため、時間の複雑さはfindOneAndDeleteと比較して少し高くなります。削除は常に高速です。

0
Manni Dula

findOneAndRemoveは削除されたドキュメントを返すので、後で削除すべきではないと判断したドキュメントを削除した場合、そのドキュメントをdbに挿入し直すことができます。文書を削除する前にロジックが適切であることを確認してから、IMOをチェックすることをお勧めします。

findOneAndDeleteには、更新するドキュメントに影響を与えるために使用できるsortパラメーターがあります。また、どの操作内で完了する必要があるかを制御できるTimeLimitパラメーターもあります。

0
Vivek Ghanchi

Mongooseでは、findOneAndDeleteはfindOneAndRemoveと同じように機能します。これらは両方とも、JSONのプロパティでオブジェクトを検索し、次にオブジェクトを削除し、削除後にオブジェクトを返します。データベースfindOneAndDeleteとしてネイティブmongodbを使用している場合、有用かもしれませんが、mongooseの場合は非推奨です。この期間の最新のmongooseおよびnodejs構成に基づいて、findOneAndDeleteを使用して操作を実行することをお勧めします。 https://github.com/Automattic/mongoose/issues/688

0
Xcode