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

MongoDBで配列内のオブジェクトを更新する方法|update()と位置演算子($)の使い方

MongoDBで配列オブジェクトを更新するには?

MongoDBでドキュメント内の配列オブジェクトを更新するには、update()メソッドを使用します。その際、ドット記法(dot notation)位置演算子($)を組み合わせることがポイントです。位置演算子「$」は、クエリ条件に一致した配列要素を自動的に特定し、その要素だけを対象に更新処理を行ってくれます。

それでは、実際にサンプルコレクションを作成しながら手順を見ていきましょう。

1. コレクションの作成とドキュメントの挿入

まず、insertOne()メソッドを使って、配列フィールド「details」を持つドキュメントを作成します。

> db.demo489.insertOne(
... {
...     details : [{
...        id : 101,
...        "Info1" : {
...           "StudentName" : "Chris"
...        },
...        "Info2" : {
...           "TeacherName" : "David"
...        }
...     },
...     {
...        id : 102,
...        "Info1" : {
...           "StudentName" : "Carol"
...        },
...        "Info2" : {
...           "TeacherName" : "Mike"
...        }
...     }
... ]
... }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8356e0b0f3fa88e22790ba")
}

2. find()でドキュメントを確認する

挿入したドキュメントを表示するには、find()メソッドを使用します。

> db.demo489.find();

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

{ "_id" : ObjectId("5e8356e0b0f3fa88e22790ba"), "details" : [ { "id" : 101, "Info1" : { "StudentName" : "Chris" }, "Info2" : { "TeacherName" : "David" } }, { "id" : 102, "Info1" : { "StudentName" : "Carol" }, "Info2" : { "TeacherName" : "Mike" } } ] }

3. 配列オブジェクトを更新するクエリ

次に、配列内の特定の要素(ここでは id: 102 の要素)を更新するクエリを実行します。$set演算子と位置演算子「$」を組み合わせることで、一致した配列要素のフィールドをまとめて変更できます。さらに、存在しない新しいフィールド(CountryName)を追加することも可能です。

> db.demo489.update({"details.id":102},
...     {$set: {"details.$.Info1.StudentName":"Robert",
...         "details.$.Info2.TeacherName":"John",
...         "details.$.CountryName" : "US"
...
...     }
... })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

4. 更新後の結果を確認する

再度find()を実行して、更新結果を確認してみましょう。

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

実行結果は以下の通りです。「id: 102」の要素だけが更新され、「StudentName」が「Robert」、「TeacherName」が「John」に変更され、新たに「CountryName: US」というフィールドも追加されていることがわかります。

{
    "_id" : ObjectId("5e8356e0b0f3fa88e22790ba"),
    "details" : [
       {
          "id" : 101,
          "Info1" : {
             "StudentName" : "Chris"
          },
          "Info2" : {
             "TeacherName" : "David"
          }
       },
       {
          "id" : 102,
          "Info1" : {
             "StudentName" : "Robert"
          },
          "Info2" : {
             "TeacherName" : "John"
          },
          "CountryName" : "US"
       }
    ]
}

まとめ

MongoDBで配列内のオブジェクトを更新する場合は、update()メソッドに対して、検索条件(例:{"details.id":102})と、位置演算子「$」を使った$setによる更新内容を指定します。これにより、該当する配列要素のみを正確かつ効率的に更新できます。既存フィールドの変更だけでなく、新しいフィールドの追加にも対応できるため、実務でも非常に便利なテクニックです。

  1. MongoDBでタグ(配列要素)を更新するクエリの書き方

    MongoDBでタグを更新するには?MongoDBでドキュメント内の配列に格納されたタグを更新するには、updateコマンドと位置演算子「$」を組み合わせて使用します。この記事では、実際にコレクションを作成し、配列内の特定のタグを更新するまでの手順をサンプルコード付きで解説します。1. コレクションの作成まず、insertOne()メソッドを使って、タグ情報を持つドキュメントを含むコレクションを作成します。> db.demo713.insertOne(... {... tags:...     [...    &nbs

  2. MongoDBでサブドキュメントの配列をクエリする方法

    MongoDBでサブドキュメントの配列をクエリするには、集計パイプラインの$unwindを使用します。$unwindは、配列フィールドを展開し、配列の各要素ごとに個別のドキュメントを生成するステージです。これにより、配列内のサブドキュメントを個別にフィルタリングできるようになります。ここでは、大学の情報を含むコレクションを作成し、その中から特定の条件に一致するサブドキュメントを抽出する手順を解説します。コレクションの作成まず、insertOne()メソッドを使って、サブドキュメントの配列を含むドキュメントを挿入しましょう。> db.demo499.insertOne({... "