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

MongoDBで特定の配列インデックスにあるオブジェクトを更新する方法

MongoDBで配列内の特定のインデックス位置にあるオブジェクトを更新するには、update()メソッドを使用し、ドット表記(例:"StudentDetails.1.1.StudentName")で対象フィールドへのパスを指定します。まずは、サンプル用のコレクションを作成しましょう。

1. コレクションの作成

以下のようにinsertOne()メソッドを使って、ネストされた配列を含むドキュメントを挿入します。

> db.updateObjectDemo.insertOne(
...   {
...       id : 101,
...       "StudentDetails":
...       [
...          [
...             {
...                "StudentName": "John"
...             },
...             { "StudentName": "Chris" }
...          ],
...          [ { "StudentName": "Carol" },
...          { "StudentName": "David" } ]
...       ]
...   }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ccdcd9b685b30d09a7111e0")
}

2. ドキュメントの確認

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

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

このコマンドを実行すると、次のような出力が得られます。

{
   "_id" : ObjectId("5ccdcd9b685b30d09a7111e0"),
   "id" : 101,
   "StudentDetails" : [
      [
         {
             "StudentName" : "John"
         },
         {
             "StudentName" : "Chris"
         }
      ],
      [
         {
             "StudentName" : "Carol"
         },
         {
             "StudentName" : "David"
         }
      ]
   ]
}

3. 特定の配列インデックスのオブジェクトを更新する

ここからが本題です。MongoDBで特定の配列インデックスのオブジェクトを更新するには、$set演算子と組み合わせて、パスにインデックス番号を直接指定します。次の例では、「StudentDetails」の2番目の配列(インデックス1)の中にある、さらに2番目の要素(インデックス1)の「StudentName」を「Mike」に変更しています。

> db.updateObjectDemo.update({"id":101},{$set:{"StudentDetails.1.1.StudentName":"Mike"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

WriteResultの「nModified : 1」と表示されていれば、1件のドキュメントが正常に更新されたことを意味します。

4. 更新結果の検証

インデックス [1][1] のオブジェクト、つまり元々「David」だった値が正しく更新されているかどうか、もう一度find()メソッドで確認してみましょう。

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

実行結果は以下のとおりです。

{
   "_id" : ObjectId("5ccdcd9b685b30d09a7111e0"),
   "id" : 101,
   "StudentDetails" : [
      [
         {
             "StudentName" : "John"
         },
         {
             "StudentName" : "Chris"
         }
      ],
      [
         {
             "StudentName" : "Carol"
         },
         {
             "StudentName" : "Mike"
         }
      ]
   ]
}

出力結果を見ると、「David」が「Mike」に置き換わっていることが確認できます。これで、特定の配列インデックスにあるオブジェクトの更新は完了です。

補足:押さえておきたいポイント

  • 配列のインデックスは0から始まる: ドット表記の数値は配列の位置を表すため、「StudentDetails.1.1」は最初の配列の2番目、その中のさらに2番目の要素を指します。
  • $set演算子の活用: 既存のフィールドだけを部分的に更新できるため、ドキュメント全体を書き換える必要がありません。
  • 新しいバージョンではupdateOne()が推奨: MongoDB 4.2以降では、update()の代わりにdb.collection.updateOne()やupdateMany()を使用するのが一般的です。構文はほぼ同じなので、そのまま置き換えて使えます。

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

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

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

    MongoDBで配列内の要素を更新する基本 MongoDBでドキュメント内の配列の要素を更新するには、update()メソッドに $set 演算子と位置演算子「$」を組み合わせて使用します。この組み合わせにより、クエリ条件に一致した配列要素だけをピンポイントで書き換えることができます。 ステップ1:コレクションの作成とドキュメントの挿入 まず、insertOne() メソッドを使ってサンプルデータを登録します。ここでは、大学名(CollegeName)と学費(Fees)を含む「CollegeDetails」という配列を持つドキュメントを1件作成しました。 > db.demo494.in