MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBのupdate()メソッドで$set演算子を使ってフィールドを一括更新する方法

MongoDBで既存ドキュメントのフィールド値をまとめて書き換えたい場合には、update()メソッド$set演算子を組み合わせて使用します。さらにmulti: trueオプションを指定することで、条件に一致したすべてのドキュメントを一度に更新できます。

本記事では、実際のコマンド例を通して、コレクションの作成から一括更新、結果の確認までの一連の流れをわかりやすく解説します。

1. サンプルコレクションの作成

まず、update()メソッドの動作を確認するためのコレクションを作成します。ここでは「workingOfUpdateMethod」というコレクションに対して、同じ値を持つドキュメントを4件挿入します。

> db.workingOfUpdateMethod.insertOne({"ClientCountryName" : "AUS"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd506fe2cba06f46efe9efa")
}
> db.workingOfUpdateMethod.insertOne({"ClientCountryName" : "AUS"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd507022cba06f46efe9efb")
}
> db.workingOfUpdateMethod.insertOne({"ClientCountryName" : "AUS"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd507022cba06f46efe9efc")
}
> db.workingOfUpdateMethod.insertOne({"ClientCountryName" : "AUS"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd507032cba06f46efe9efd")
}

すべてのinsertOne()が正常に完了し、「acknowledged: true」が返されていることが確認できます。

2. find()メソッドで登録済みドキュメントを表示する

次に、find()メソッドを使ってコレクション内の全ドキュメントを表示し、更新前の状態を確認しておきます。

> db.workingOfUpdateMethod.find().pretty();

実行すると、以下のような出力が得られます。

{ "_id" : ObjectId("5cd506fe2cba06f46efe9efa"), "ClientCountryName" : "AUS" }
{ "_id" : ObjectId("5cd507022cba06f46efe9efb"), "ClientCountryName" : "AUS" }
{ "_id" : ObjectId("5cd507022cba06f46efe9efc"), "ClientCountryName" : "AUS" }
{ "_id" : ObjectId("5cd507032cba06f46efe9efd"), "ClientCountryName" : "AUS" }

4件すべてのドキュメントで、フィールド「ClientCountryName」の値が「AUS」になっています。

3. update()メソッドと$set演算子でフィールドを一括更新する

続いて、update()メソッドを使用して、フィールド全体の値を新しいものに置き換えます。ここでは、フィールド「ClientCountryName」を「AUS」から「UK」へ一括更新してみましょう。

> db.workingOfUpdateMethod.update(
... {"ClientCountryName" : "AUS"},
... {$set: {"ClientCountryName" : "UK"}},
... {multi: true});
WriteResult({ "nMatched" : 4, "nUpserted" : 0, "nModified" : 4 })

各引数の意味は以下の通りです。

  • 第1引数(検索条件):「ClientCountryName」が「AUS」と一致するドキュメントを対象に指定しています。
  • 第2引数(更新内容):$set演算子によって、「ClientCountryName」の値を「UK」に設定しています。
  • 第3引数(オプション)multi: trueを指定することで、条件に一致したすべてのドキュメントが更新対象になります。これを省略すると、最初の1件のみが更新される点に注意してください。

実行結果のWriteResultでは、「nMatched: 4」(4件が一致)、「nModified: 4」(4件が更新)と報告されており、すべてのドキュメントが正常に更新されたことがわかります。

4. 更新後のデータを確認する

最後に、もう一度find()メソッドを実行して、更新結果を確認しましょう。

> db.workingOfUpdateMethod.find().pretty();

実行すると、以下の出力が得られます。

{ "_id" : ObjectId("5cd506fe2cba06f46efe9efa"), "ClientCountryName" : "UK" }
{ "_id" : ObjectId("5cd507022cba06f46efe9efb"), "ClientCountryName" : "UK" }
{ "_id" : ObjectId("5cd507022cba06f46efe9efc"), "ClientCountryName" : "UK" }
{ "_id" : ObjectId("5cd507032cba06f46efe9efd"), "ClientCountryName" : "UK" }

すべてのドキュメントの「ClientCountryName」が「UK」に書き換わっていることが確認できました。

まとめ

MongoDBでフィールドの値を一括更新するには、update()メソッドと$set演算子を組み合わせるのが基本です。特に複数ドキュメントを同時に更新したい場合は、{ multi: true }オプションの指定を忘れないようにしましょう。なお、MongoDBの最新バージョンでは、より柔軟なupdateMany()updateOne()メソッドの利用も推奨されています。

  1. MongoDBでタイムスタンプを更新し、現在の日付に設定する方法

    MongoDBでタイムスタンプを更新し、現在の日付に設定する方法MongoDBでドキュメントを更新するにはupdate()メソッドを使用します。フィールドを現在の日付に設定したい場合は、まずJavaScriptのDateオブジェクトで現在の日時を取得しておく必要があります。var todayDate = new Date();1. コレクションとドキュメントの作成まず、insertOne()メソッドを使ってサンプルドキュメントを含むコレクションを作成しましょう。> db.demo644.insertOne({"ShippingDate":new ISODate(&qu

  2. MongoDBで特定のフィールド値のみを更新するクエリの書き方

    MongoDBでは、update()メソッドと$set演算子を組み合わせることで、ドキュメント全体を置き換えることなく、特定のフィールドの値だけを効率的に更新できます。本記事では、実際のコード例を通じて、その具体的な手順をわかりやすく解説します。 1. コレクションとドキュメントの作成 まずは例として、insertOne()メソッドを使って「demo557」というコレクションにドキュメントを挿入します。 > db.demo557.insertOne({Name:Chris}); { acknowledged : true, insertedId : ObjectId(5e8