MongoDB Update() ドキュメントと例
\
⚡ スマートサマリー
MongoDB Update() ドキュメント操作は、コレクション内の既存のレコードを変更します。update() メソッドは、ドキュメントを選択するための条件と、フィールド値を変更するための $set などの修飾子を受け取ります。また、multi オプションを使用すると、一致する複数のドキュメントを一度に更新できます。

基本的なドキュメントの更新
MongoDB コレクションのドキュメントを更新するための update() コマンドを提供します。更新したいドキュメントのみを更新するには、選択したドキュメントのみが更新されるように更新ステートメントに条件を追加します。
コマンドの基本パラメータはドキュメントを更新する必要がある条件であり、次に実行する必要がある変更です。
次の例は、これを実行する方法を示しています。
ステップ1) 更新コマンドを発行します
ステップ2) どのドキュメントを更新する必要があるかを決定するために使用する条件を選択します。 この例では、従業員 ID が 22 のドキュメントを更新したいと考えています。
ステップ3) set コマンドを使用してフィールド名を変更します
ステップ4) 変更するフィールド名を選択し、それに応じて新しい値を入力します。
db.Employee.update( {"Employeeid" : 1}, {$set: { "EmployeeName" : "NewMartin"}});
コマンドが正常に実行されると、次の出力が表示されます。
出力:
出力には、XNUMX つのレコードが条件に一致したため、関連するフィールド値が変更されたことが明確に示されています。
MongoDB 更新 Operaトー
$set演算子はフィールドを変更する最も一般的な方法ですが、 MongoDB さまざまなニーズに対応する複数の更新演算子が用意されています。これらは、update() 関数の 2 番目の引数に、$set と並べて、または $set の代わりに指定できます。
- $セット: フィールドの値を設定します。フィールドが存在しない場合は作成します。
- $unset: ドキュメントからフィールドを完全に削除します。
- $inc: 数値フィールドを指定された量だけ増減します。
- $mul: 数値フィールドの値を乗算します。
- $rename: フィールド名を新しい名前に変更します。
- $push: 配列フィールドに値を追加します。
- $pull: 配列フィールドから一致する値を削除します。
各演算子は、指定したフィールドのみを対象とし、ドキュメントの残りの部分は変更されません。複数の演算子を単一の update() 呼び出しで組み合わせることで、複数のフィールドを一度に変更でき、更新の精度を維持し、保持したいデータの上書きを防ぐことができます。
複数の値の更新
複数の/一括ドキュメントが確実に同時に更新されるようにするには MongoDB multi オプションを使用する必要があります。そうしないと、デフォルトでは一度に 1 つのドキュメントのみが変更されます。
次の例は、多数のドキュメントを更新する方法を示しています。
この例では、まず従業員 ID が「1」であるドキュメントを検索し、従業員名を「Martin」から「NewMartin」に変更します。
ステップ1) 更新コマンドを発行します
ステップ2) どのドキュメントを更新する必要があるかを決定するために使用する条件を選択します。 この例では、従業員 ID が「1」のドキュメントを更新する必要があります。
ステップ3) 変更するフィールド名を選択し、それに応じて新しい値を入力します。
db.Employee.update ( { Employeeid : 1 }, { $set : { "EmployeeName" : "NewMartin", "Employeeid" : 22 } } )
コマンドが正常に実行され、 "探す" 従業員IDが22の文書を検索するコマンドを実行すると、次の出力が表示されます。
出力:
出力には、XNUMX つのレコードが条件に一致したため、関連するフィールド値が変更されたことが明確に示されています。
ドキュメントをアップサートする方法 MongoDB
アップサートは更新と挿入の組み合わせです。これを有効にすると、 MongoDB 条件に一致する文書を更新するか、一致する文書が見つからない場合は新しい文書を挿入します。これは、レコードが既に存在するかどうか不明な場合に便利です。
アップサートを実行するには、update() 関数の 3 番目の引数として upsert オプションを true に設定して追加します。
db.Employee.update( {Employeeid: 5}, {$set: {EmployeeName: "Sofia"}}, {upsert: true} )
ここで何が起こるか:
- 従業員IDが5の文書が存在する場合、 MongoDB 従業員名フィールドを更新します。
- そのような文書が存在しない場合、 MongoDB 従業員ID 5、従業員名「Sofi"
アップサートは、カウンター、設定、および初回使用時にレコードを作成し、その後更新したいワークフローに便利です。 MongoDB同様の動作は、updateOne() および updateMany() メソッドのオプションに {upsert: true} を渡すことで実現できます。ただし、条件には注意してください。広範囲のフィルタと upsert を組み合わせると、予期しないドキュメントが作成される可能性があるためです。
updateOne()、updateMany()、replaceOne()の比較
update() メソッドは現在、レガシー コマンドです。 MongoDB ドライバーは、その動作をより明確な3つの方法に分類しました。以下の表は、それらを比較したものです。
| 方法 | 何それがありません | 影響を受ける文書 |
|---|---|---|
| updateOne() | 最初に一致した文書に更新演算子を適用します | 1 |
| updateMany() | 一致するすべてのドキュメントに更新演算子を適用します | その他にもたくさんのグーグルの |
| replaceOne() | 最初に一致した文書全体を新しい文書に置き換えます | 1 |
単一の対象を変更する場合は updateOne() を、従来の multi オプションの代わりに updateMany() を、フィールドを編集するのではなくドキュメント全体を交換する場合は replaceOne() を使用してください。これらのメソッドは、一致したドキュメントの数と変更されたドキュメントの数を明確に示す結果を返すため、update() よりも安全でデバッグが容易です。


