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

MongoDBでサブオブジェクト(ネストされたフィールド)を更新する方法

MongoDBでは、$set 演算子とドット表記(dot notation)を組み合わせることで、ドキュメント内のサブオブジェクト(ネストされたフィールド)を簡単に更新できます。既存のサブオブジェクト全体を置き換えることなく、特定のフィールドだけを追加・変更できるのがポイントです。

この記事では、実際のコード例を通して、サブオブジェクトの更新手順を順番に解説します。

1. テスト用コレクションの作成

まず、サブオブジェクトを持つドキュメントを含むコレクションを作成します。insertOne() メソッドを使用します。

> db.updateSubObjectDemo.insertOne(
...    {
...       "ClientId" : 100,
...       "ClientDetails" : {
...          "ClientFirstName" : "Adam"
...       }
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd31434b64f4b851c3a13e9")
}

この例では、「ClientDetails」というサブオブジェクトの中に「ClientFirstName」というフィールドが格納されています。

2. 作成したドキュメントの確認

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

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

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

{
   "_id" : ObjectId("5cd31434b64f4b851c3a13e9"),
   "ClientId" : 100,
   "ClientDetails" : {
      "ClientFirstName" : "Adam"
   }
}

3. $set 演算子でサブオブジェクトを更新する

続いて、MongoDBでサブオブジェクトを更新するクエリを見ていきます。ここでは、ドット表記「ClientDetails.ClientLastName」を指定し、$set 演算子で新しいフィールド「ClientLastName」を追加しています。

> db.updateSubObjectDemo.update({ClientId : 100}, { $set : { "ClientDetails.ClientLastName" : "Smith"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

実行結果の「nModified : 1」は、1件のドキュメントが正常に更新されたことを示しています。

ポイント: ドット表記でパスを指定することで、サブオブジェクト内の特定のフィールドのみを更新できます。仮に指定したフィールドが存在しない場合でも、$set 演算子は自動的にそのフィールドを作成します。また、更新対象が見つからなかった場合にドキュメントを新規作成したい場合は、update() の第3引数に { upsert: true } を指定するのも有効です。

4. 更新後のドキュメントを確認する

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

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

出力は次のようになります。

{
   "_id" : ObjectId("5cd31434b64f4b851c3a13e9"),
   "ClientId" : 100,
   "ClientDetails" : {
      "ClientFirstName" : "Adam",
      "ClientLastName" : "Smith"
   }
}

ご覧のとおり、「ClientDetails」サブオブジェクト内に「ClientLastName : Smith」というフィールドが追加されました。このように、既存の「ClientFirstName」フィールドはそのまま維持され、必要な部分だけが更新されていることが分かります。

まとめ

  • サブオブジェクトの更新には $set 演算子を使用する
  • ネストされたフィールドはドット表記(例:「親フィールド.子フィールド」)で指定する
  • 存在しないフィールドを指定した場合は自動的に新規作成される

$set とドット表記を正しく使いこなせば、MongoDBのネストされたデータ構造も柔軟かつ安全に操作できます。ぜひ実際のプロジェクトでも活用してみてください。

  1. MongoDBでドキュメント更新時にカスタム変数を使用する方法

    MongoDBでドキュメントを更新する際には、update()メソッドを使用します。カスタム変数を作成して利用するための基本構文は以下のとおりです。 var anyVariableName = yourValue; db.yourCollectionName.update({filter}, {$set: {yourFieldName: anyVariableName}}); まず変数を宣言して値を代入し、その変数を$set演算子の中で参照することで、柔軟にフィールドを更新できるのがポイントです。 サンプルコレクションの作成 それでは、実際に動きを確認するために、ドキュメントを含むコレクショ

  2. MongoDBで_idを指定してコレクション内のドキュメントを更新する方法

    MongoDBでは、_idを指定して特定のドキュメントを更新する際に、$set演算子を使用します。_idは各ドキュメントの一意な識別子であるため、これを条件にすることで目的のドキュメントだけを正確に更新できます。この記事では、実際にコレクションを作成し、_idをキーにしてドキュメントを更新する手順を順番に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使ってサンプルのコレクションにドキュメントを挿入します。db.demo741.insertOne({SubjectName:MySQL}); { acknowledged : true,