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

MongoDBの$push演算子で配列を更新する方法

MongoDBで配列に要素を追加・更新するには、$push 演算子と updateOne() メソッドを組み合わせて使用します。この記事では、実際のコード例を通じて、ネストされた配列内の特定のドキュメントを $push で更新する手順を解説します。

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

まず、insertOne() メソッドを使って、ドキュメントを含むコレクションを作成します。

> db.demo526.insertOne(
... {
...     "CountryName": "US",
...     "TeacherName": "Bob",
...     "StudentInformation": [
...        {
...           "Name": "Chris",
...           "Subject": "MySQL",
...           "ListOfMailId":[]
...        },
...        {
...           "Name": "David",
...           "Subject": "MongoDB",
...           "ListOfMailId":[]
...        }
...     ]
... }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8af031437efc8605595b6b")
}

この例では、教師「Bob」のドキュメントの中に、生徒情報(StudentInformation)が配列として格納されています。各生徒は名前、科目、メールアドレスリスト(ListOfMailId)を持つ構造です。

登録済みドキュメントの確認

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

> db.demo526.find();

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

{ "_id" : ObjectId("5e8af031437efc8605595b6b"), "CountryName" : "US", "TeacherName" :
"Bob", "StudentInformation" : [ { "Name" : "Chris", "Subject" : "MySQL", "ListOfMailId" : [ ] }, {
"Name" : "David", "Subject" : "MongoDB", "ListOfMailId" : [ ] } ] }

現時点では、両方の生徒の ListOfMailId は空の配列になっています。

$push を使った配列の更新クエリ

次に、$push 演算子を使って、特定の生徒のメールアドレスリストに新しい要素を追加します。ここでのポイントは、$elemMatch を使って更新対象の配列要素を正確に特定し、位置指定演算子($)でその要素を参照することです。

> db.demo526.updateOne(
... {
...     _id:ObjectId("5e8af031437efc8605595b6b"),
...     "StudentInformation": { "$elemMatch": { "Name": "David", "Subject": "MongoDB" }}
... },
... {
...     "$push": { "StudentInformation.$.ListOfMailId": { "MailId": "David@gmail.com" }}
... }
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

このクエリでは以下の処理が行われています。

  • 検索条件: _id が一致し、かつ StudentInformation 配列内に「Name: David」「Subject: MongoDB」に該当する要素が存在するドキュメントを対象とします。
  • 更新内容: $push により、該当する要素($ で参照)の ListOfMailId 配列に新しいメールアドレスを追加します。

実行結果として matchedCount: 1modifiedCount: 1 が返され、正常に更新されたことがわかります。

更新後の結果確認

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

> db.demo526.find();

以下のように、David の ListOfMailId にのみ新しいメールアドレスが追加されていることが確認できます。

{ "_id" : ObjectId("5e8af031437efc8605595b6b"), "CountryName" : "US", "TeacherName" : "Bob", "StudentInformation" : [
   { "Name" : "Chris", "Subject" : "MySQL", "ListOfMailId" : [ ] },
   { "Name" : "David", "Subject" : "MongoDB", "ListOfMailId" : [ { "MailId" : "David@gmail.com" } ] }
] }

まとめ

MongoDBでネストされた配列を更新する際は、$elemMatch で対象要素を絞り込み、位置指定演算子 $ と $push を組み合わせることで、他のデータに影響を与えることなくピンポイントで配列に要素を追加できます。この手法は、コメントやタグ、履歴データなど、動的に増えていく配列データの管理に非常に役立ちます。

  1. MongoDBで配列内の要素数をカウントする方法

    MongoDBで配列内の要素数をカウントする基本MongoDBで配列(Array)内のアイテム数をカウントするには、lengthプロパティを使用します。この記事では、実際にコレクションを作成し、配列の要素数を取得するまでの手順を実行例付きで解説します。1. コレクションにドキュメントを挿入するまず、insertOne()メソッドを使って、配列フィールドを持つドキュメントを含むコレクションを作成しましょう。> db.demo440.insertOne( ...    { ...       "Name":"Ch

  2. MongoDBの$push演算子を使って配列に要素を追加する方法

    MongoDBの$push演算子とはMongoDBの$push演算子は、ドキュメント内の配列フィールドに対して新しい要素を追加するための更新演算子です。既存の配列の末尾に値を追加できるため、リスト形式のデータを扱う際に非常に便利です。この記事では、実際のコード例を通して、$push演算子の基本的な使い方を解説します。1. コレクションとドキュメントを作成するまず、insertOne()メソッドを使用して、コレクションにドキュメントを挿入します。ここでは「Subjects」という配列フィールドを持つ2つのドキュメントを作成します。> db.demo738.insertOne({Subjec