MongoDB で findOneAndUpdate() メソッドを使用する
-
MongoDB で
findOneAndUpdate()
メソッドを使用する -
findOneAndUpdate()
メソッドを使用して、最初に一致したドキュメントを更新する -
findOneAndUpdate()
メソッドを使用して埋め込みドキュメントの値を更新する -
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>, … ]
})
パラメーター:
- 最初のパラメーター
selection_criteria
は、更新の選択基準です。 このパラメーターの型はドキュメントです。 - 2 番目のパラメーター
update_data
は、更新するドキュメントです。 このパラメーターの型はドキュメントです。 - 3 番目のパラメーターはオプションです。
オプションのパラメータ:
-
projection
: このパラメーターの型はドキュメントです。 射影パラメータは、一致するドキュメントに返されるフィールドを決定します。このドキュメントは次の値を取ります。
{ field1: <boolean>, field2: <boolean> ... }
フィールドの値が
1
またはtrue
の場合、フィールドが含まれていることを示し、フィールドの値が0
またはfalse
の場合、フィールドは除外されます。
-
sort
: これにより、クエリで複数のドキュメントが選択された場合に操作が変更するドキュメントが決まります。db.collection.findOneAndUpdate()
メソッドは、この引数で指定されたソート順で最初のドキュメントを更新します。このパラメーターの型はドキュメントです。
-
maxTimeMS
: このパラメータの型は数値です。 操作が完了するまでの時間制限をミリ秒単位で指定します。制限時間を超えると、エラーが返されます。
-
upsert
: このパラメーターのデフォルト値はfalse
です。このオプションの値が
true
に設定されていて、指定されたフィルター クエリに一致するドキュメントがないとします。 その場合、このメソッドは新しいドキュメントを作成します。returnNewDocument
オプションの値がtrue.
に設定されていない限り、null
値を返します (新しいドキュメントを挿入した後)。 または、このupsert
オプションの値がtrue.
に設定されている場合、このメソッドは指定されたフィルター クエリに一致するドキュメントを更新します。 -
returnNewDocument
: このパラメータ タイプはブール値です。 デフォルトでは、このメソッドは元のドキュメントを返します。returnNewDocument
パラメータを使用し、その値をtrue
に設定して、更新されたドキュメントを返します。 -
照合
: 操作に照合を使用することを指定します。 これにより、ユーザーは、大文字小文字やアクセント記号のルールなど、文字列比較の言語固有のルールを決定できます。このパラメーターの型はドキュメントです。
-
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()
メソッドを使用して埋め込みドキュメントの値を更新する
この例では、次のクエリを使用します。
db.student.findOneAndUpdate({name:"Hamza"},{$inc:{"score.Math":5}})
ここでは、埋め込みドキュメントの Math
フィールドの値を更新します。 Math
フィールドの値が 5 増加します。
出力:
findOneAndUpdate()
メソッドを使用して、最初に一致したドキュメントを更新し、更新されたドキュメントを返す
この例では、次のクエリを使用します。
db.student.findOneAndUpdate({name:"Ali"},{$inc:{score:5}},{returnNewDocument:true})
ここでは、選択基準 (例: name: "Ali"
) に従って最初に一致したドキュメントを、新しいドキュメント (例: {$inc:{score:5}
}) で更新します。 の値 score
フィールドが 5 増加します。
returnNewDocument
の値を true
に設定したため、新しく更新されたドキュメントが返されます。
出力:
まとめ
この MongoDB チュートリアル記事の助けを借りて、db.collection.findOneAndUpdate()
メソッドの使用方法を学びました。このメソッドは、選択基準に一致するコレクション内の最初に一致したドキュメントを更新するために使用されます。 このメソッドを使用して、埋め込まれたドキュメントを置き換えたり、複数ドキュメントのトランザクションで使用したりすることもできます。