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

MongoDBでネストされた内部配列にデータを挿入する方法

MongoDBでは、ドキュメント内にネストされた配列(内部配列)へデータを追加する際、$addToSet 演算子を使用すると便利です。$addToSet は、指定した値が配列に存在しない場合のみ追加するため、重複データの発生を防ぐことができます。

この記事では、実際のコード例を使いながら、内部配列へのデータ挿入手順を段階的に解説します。

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

まず、insertOne() メソッドを使ってサンプル用のコレクションを作成します。このコレクションには、各ユーザーの「UserDetails」フィールド内に「userGroupMessage」という配列が含まれています。

> db.insertDataIntoArrayDemo.insertOne(
    {
       "UserDetails":[
          {
             "UserId" :"user121",
             "userGroupMessage":[]
          },
          {
             "UserId" :"user221",
             "userGroupMessage":["Cool","Good Morning"]
          }
       ]
    }
);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd694e157806ebf1256f128")
}

登録されたドキュメントの確認

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

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

実行結果は以下の通りです。ユーザー「user121」の userGroupMessage はまだ空の配列であることがわかります。

{
    "_id" : ObjectId("5cd694e157806ebf1256f128"),
    "UserDetails" : [
       {
          "UserId" : "user121",
          "userGroupMessage" : [ ]
       },
       {
          "UserId" : "user221",
          "userGroupMessage" : [
             "Cool",
             "Good Morning"
          ]
       }
    ]
}

内部配列へのデータ挿入クエリ

ここからが本題です。ネストされた内部配列にデータを挿入するには、位置演算子「$」と $addToSet を組み合わせて使用します。以下の例では、「user121」の userGroupMessage 配列に「Hello」という文字列を追加しています。

> db.insertDataIntoArrayDemo.update({"UserDetails.UserId":"user121"},
    {"$addToSet":{"UserDetails.$.userGroupMessage":"Hello"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

クエリのポイントは次の2つです。

  • 検索条件「{"UserDetails.UserId":"user121"}」で対象のユーザーを特定します。
  • 「UserDetails.$」の「$」は、条件に一致した配列要素の位置を自動的に参照する位置演算子です。

なお、MongoDB の最新バージョンでは update() は非推奨となっているため、実際の開発では updateOne()updateMany() の使用を推奨します。

> db.insertDataIntoArrayDemo.updateOne(
    {"UserDetails.UserId":"user121"},
    {"$addToSet":{"UserDetails.$.userGroupMessage":"Hello"}}
);

更新結果の確認

再度 find() メソッドを実行して、ドキュメントが正しく更新されたか確認しましょう。

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

実行結果を見ると、「user121」の userGroupMessage 配列に「Hello」が追加されていることが確認できます。

{
    "_id" : ObjectId("5cd694e157806ebf1256f128"),
    "UserDetails" : [
       {
          "UserId" : "user121",
          "userGroupMessage" : [
             "Hello"
          ]
       },
       {
          "UserId" : "user221",
          "userGroupMessage" : [
             "Cool",
             "Good Morning"
          ]
       }
    ]
}

まとめ

MongoDBでネストされた内部配列にデータを挿入する場合は、$addToSet 演算子と位置演算子「$」を組み合わせるのが基本の手法です。$addToSet を使えば重複を自動的に回避できるため、メッセージ履歴やタグ管理など、同じ値を複数回追加したくないシーンで特に役立ちます。なお、単純に値を追加したい場合(重複を許容する場合)は、代わりに $push 演算子を使用してください。

  1. MongoDBでJSON配列の内部要素にアクセスする方法|ドット記法の使い方を解説

    MongoDBでJSON配列の内部要素にアクセスするには、ドット記法(dot notation)を使用します。本記事では、実際にコレクションを作成し、ネストされた配列内のフィールドを検索する具体的な手順を、サンプルコードと実行結果とともに解説します。 サンプルデータの作成 まず、insert()メソッドを使って、ネストされた構造を持つドキュメントを含むコレクションを作成しましょう。 > db.demo687.insert({CountryName:US, ... info: ... { ... id:101, ... details: ... [ ... { ...   &n

  2. MySQLのテーブルにデータを挿入するには?INSERT INTOコマンドの基本と実行例

    MySQLのテーブルにデータを挿入するには、INSERT INTOコマンドを使用します。このコマンドを実行する際は、テーブルのすべてのカラムに対して値を指定する必要があります。 構文 INSERT INTO table_name values(value1,value2,…) table_nameには対象となるテーブル名を指定し、values()の中には各カラムに対応する値を順番にカンマ区切りで記述します。文字列型の値はシングルクォート()で囲む点に注意してください。 実行例 ここでは、「RollNo」「Name」「Class」という3つのカラムを持つ「Student」