MongoDB で findOneAndUpdate() メソッドを使用する

Tahseen Tauseef 2024年2月15日
  1. MongoDB で findOneAndUpdate() メソッドを使用する
  2. findOneAndUpdate() メソッドを使用して、最初に一致したドキュメントを更新する
  3. findOneAndUpdate() メソッドを使用して埋め込みドキュメントの値を更新する
  4. findOneAndUpdate() メソッドを使用して、最初に一致したドキュメントを更新し、更新されたドキュメントを返す
  5. まとめ
MongoDB で findOneAndUpdate() メソッドを使用する

この記事では、MongoDB の findOneAndUpdate() メソッドを紹介します。 このメソッドを使用して、最初に一致した埋め込みドキュメントを更新します。

MongoDB で findOneAndUpdate() メソッドを使用する

メソッド db.collection.findOneAndUpdate() は、選択基準に従って、コレクションの一致するドキュメントを更新します。 このメソッドは、一致するドキュメントが複数ある場合に、選択基準に一致する最初のドキュメントのみを更新します。

ドキュメントを更新しても _id フィールドの値は変わりません。

このメソッドは元のドキュメントを返します。 ただし、更新されたドキュメントを返す場合は、returnNewDocument パラメータの値を true に指定する必要があります。

このメソッドを使用して、埋め込まれたドキュメントを置き換えることができます。 このアプローチは、マルチドキュメント トランザクションでも使用できます。

構文:

db.collection.findOneAndUpdate(

selection_criteria: <document>,

update_data: <document>,
{
   projection: <document>,

    sort: <document>,

    maxTimeMS: <number>,

    upsert: <boolean>,

    returnNewDocument: <boolean>,

    collation: <document>,

    arrayFilters: [ <filterdocument1>,  ]
})

パラメーター:

  1. 最初のパラメーター selection_criteria は、更新の選択基準です。 このパラメーターの型はドキュメントです。
  2. 2 番目のパラメーター update_data は、更新するドキュメントです。 このパラメーターの型はドキュメントです。
  3. 3 番目のパラメーターはオプションです。

オプションのパラメータ:

  1. projection: このパラメーターの型はドキュメントです。 射影パラメータは、一致するドキュメントに返されるフィールドを決定します。

    このドキュメントは次の値を取ります。

    { field1: <boolean>, field2: <boolean> ... }
    

    フィールドの値が 1 または true の場合、フィールドが含まれていることを示し、フィールドの値が 0 または false の場合、フィールドは除外されます。

  1. sort: これにより、クエリで複数のドキュメントが選択された場合に操作が変更するドキュメントが決まります。 db.collection.findOneAndUpdate() メソッドは、この引数で指定されたソート順で最初のドキュメントを更新します。

    このパラメーターの型はドキュメントです。

  2. maxTimeMS: このパラメータの型は数値です。 操作が完了するまでの時間制限をミリ秒単位で指定します。

    制限時間を超えると、エラーが返されます。

  3. upsert: このパラメーターのデフォルト値は false です。

    このオプションの値が true に設定されていて、指定されたフィルター クエリに一致するドキュメントがないとします。 その場合、このメソッドは新しいドキュメントを作成します。

    returnNewDocument オプションの値が true. に設定されていない限り、null 値を返します (新しいドキュメントを挿入した後)。 または、この upsert オプションの値が true. に設定されている場合、このメソッドは指定されたフィルター クエリに一致するドキュメントを更新します。

  4. returnNewDocument: このパラメータ タイプはブール値です。 デフォルトでは、このメソッドは元のドキュメントを返します。

    returnNewDocument パラメータを使用し、その値を true に設定して、更新されたドキュメントを返します。

  5. 照合: 操作に照合を使用することを指定します。 これにより、ユーザーは、大文字小文字やアクセント記号のルールなど、文字列比較の言語固有のルールを決定できます。

    このパラメーターの型はドキュメントです。

  6. arrayFilters: フィルター ドキュメントの配列は、配列フィールドでの更新操作のためにどの配列要素を変更するかを示します。 このパラメーターの型は配列です。

元のドキュメントが返されますが、更新されたドキュメントを返したい場合は、returnNewDocument パラメータの値を true に設定する必要があります。

次の例では、次のデータベースを使用します。 生徒の詳細を含むドキュメントを含む students というコレクションを作成します。

データベースを以下に示します。

db={
  "students": [
    {
      id: 1,
      name: "Ali",
      language: "JavaScript",
      score: 82
    },
    {
      id: 2,
      name: "Haris",
      language: "Python",
      score: 91
    },
    {
      id: 3,
      name: "Hamza",
      language: "Python",
      score: {
        "Physics": 84,
        "Math": 85
      }
    }
  ]
}

findOneAndUpdate() メソッドを使用して、最初に一致したドキュメントを更新する

この例では、次のクエリを使用します。

db.students.findOneAndUpdate({name:"Ali"},{$inc:{score:4}})

ここでは、新しいドキュメント (つまり、{$inc:{score:4}}) によって、選択基準 (つまり、name: "Ali") に従って最初に一致したドキュメントを更新します。 score フィールドが 4 増加し、元のドキュメントが返されます。

出力:

findOneAndUpdate() メソッド

ドキュメントを更新すると、この出力が返されます。

findOneAndUpdate() メソッドを使用して埋め込みドキュメントの値を更新する

この例では、次のクエリを使用します。

db.student.findOneAndUpdate({name:"Hamza"},{$inc:{"score.Math":5}})

ここでは、埋め込みドキュメントの Math フィールドの値を更新します。 Math フィールドの値が 5 増加します。

出力:

findOneAndUpdate() メソッド 2

findOneAndUpdate() メソッドを使用して、最初に一致したドキュメントを更新し、更新されたドキュメントを返す

この例では、次のクエリを使用します。

 db.student.findOneAndUpdate({name:"Ali"},{$inc:{score:5}},{returnNewDocument:true})

ここでは、選択基準 (例: name: "Ali") に従って最初に一致したドキュメントを、新しいドキュメント (例: {$inc:{score:5}}) で更新します。 の値 score フィールドが 5 増加します。

returnNewDocument の値を true に設定したため、新しく更新されたドキュメントが返されます。

出力:

findOneAndUpdate() メソッド 3

まとめ

この MongoDB チュートリアル記事の助けを借りて、db.collection.findOneAndUpdate() メソッドの使用方法を学びました。このメソッドは、選択基準に一致するコレクション内の最初に一致したドキュメントを更新するために使用されます。 このメソッドを使用して、埋め込まれたドキュメントを置き換えたり、複数ドキュメントのトランザクションで使用したりすることもできます。

関連記事 - MongoDB Method