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

MongoDBで配列内の要素を更新する方法|$setと位置演算子$の使い方を解説

MongoDBで配列内の要素を更新する基本

MongoDBでドキュメント内の配列の要素を更新するには、update()メソッドに $set 演算子と位置演算子「$」を組み合わせて使用します。この組み合わせにより、クエリ条件に一致した配列要素だけをピンポイントで書き換えることができます。

ステップ1:コレクションの作成とドキュメントの挿入

まず、insertOne() メソッドを使ってサンプルデータを登録します。ここでは、大学名(CollegeName)と学費(Fees)を含む「CollegeDetails」という配列を持つドキュメントを1件作成しました。

> db.demo494.insertOne(
... {
...    "CollegeDetails" : [
...       {
...          "CollegeName" : "MIT",
...          "Fees" : 80000
...       },
...       {
...          "CollegeName" : "SU",
...          "Fees" : 90000
...       }
...    ]
... }
... )
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e84a5c1b0f3fa88e22790c9")
}

ステップ2:find()メソッドで登録内容を確認する

find() メソッドを使うと、コレクション内のすべてのドキュメントを表示して確認できます。

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

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

{
   "_id" : ObjectId("5e84a5c1b0f3fa88e22790c9"),
   "CollegeDetails" : [
      {
         "CollegeName" : "MIT",
         "Fees" : 80000
      },
      {
         "CollegeName" : "SU",
         "Fees" : 90000
      }
   ]
}

ステップ3:$setと位置演算子「$」で配列要素を更新する

ここからが本題です。次のクエリでは、「CollegeNameが MIT である配列要素」を検索条件として指定し、該当する要素の Fees(学費)だけを 100000 に更新しています。

> db.demo494.update(
...
... {
...    "CollegeDetails.CollegeName": "MIT"
... },
...
... {
...    $set:
...       {
...          "CollegeDetails.$.Fees" : 100000
...       }
...    }
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

ポイントとなるのは "CollegeDetails.$.Fees" の部分です。この「$」(位置演算子)は、クエリ条件に一致した配列要素の位置(インデックス)を自動的に参照します。そのため、配列全体を上書きすることなく、意図した1つの要素だけを正確に更新できます。実行結果の WriteResult を見ると、1件のドキュメントがマッチし(nMatched: 1)、1件が変更された(nModified: 1)ことがわかります。

ステップ4:更新後のドキュメントを確認する

もう一度 find() メソッドを実行して、更新が正しく反映されているかチェックしましょう。

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

出力結果を見ると、MIT の学費だけが 80000 から 100000 に更新され、SU の学費(90000)は元のまま変わっていないことが確認できます。

{
   "_id" : ObjectId("5e84a5c1b0f3fa88e22790c9"),
   "CollegeDetails" : [
      {
         "CollegeName" : "MIT",
         "Fees" : 100000
      },
      {
         "CollegeName" : "SU",
         "Fees" : 90000
      }
   ]
}

まとめ:押さえておきたいポイント

  • 配列内の要素を更新するには、$set 演算子と位置演算子「$」を組み合わせる。
  • 「配列フィールド名.$.更新したいキー」という形式で記述すると、条件に一致した要素だけを書き換えられる。
  • 新しいバージョンの MongoDB では update() の代わりに updateOne() / updateMany() の使用が推奨されています。引数の渡し方はほぼ同じなので、そのまま置き換えて利用できます。
  1. MongoDBで配列内のオブジェクトを更新する方法|update()と位置演算子($)の使い方

    MongoDBで配列オブジェクトを更新するには?MongoDBでドキュメント内の配列オブジェクトを更新するには、update()メソッドを使用します。その際、ドット記法(dot notation)と位置演算子($)を組み合わせることがポイントです。位置演算子「$」は、クエリ条件に一致した配列要素を自動的に特定し、その要素だけを対象に更新処理を行ってくれます。それでは、実際にサンプルコレクションを作成しながら手順を見ていきましょう。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って、配列フィールド「details」を持つドキュメントを作成します。> d

  2. 【MongoDB】特定の要素を別の配列へ移動させる方法

    MongoDBで、配列内の条件に一致する要素を別の配列へ移動させたい場合は、forEach()で各ドキュメントを走査し、条件に合う要素を判定した上でsave()を使って更新します。この記事では、実際のコード例と実行結果をもとに、その手順をわかりやすく解説します。1. サンプルコレクションの作成まず、テスト用のドキュメントを含むコレクションを作成しましょう。ここでは「Information」配列と空の「different」配列を持つドキュメントを挿入します。> db.demo646.insertOne( ... { ... Information: [ ...