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

MongoDBでサブドキュメント配列にサブドキュメントを追加する方法|$push演算子の使い方を解説

MongoDBでネストされたサブドキュメント配列に新しいサブドキュメントを追加するには、$push 演算子を使用します。$push は、指定した配列フィールドの末尾に値やオブジェクトを追加するための更新演算子です。

この記事では、実際にコレクションを作成し、サブドキュメント配列へサブドキュメントを追加するまでの手順を順番に解説します。

手順1:ドキュメントを含むコレクションを作成する

まず、insertOne() メソッドを使ってサンプル用のコレクションを作成します。

> db.subDocumentToSubDocumentDemo.insertOne(
   {
      "_id" :101,
      "StudentName" : "Larry",
      "StudentAge" : 21,
      "StudentDetails" : [
         {
            "StudentCountryName" : "US",
            "StudentFavouriteSubjectList" : [ ]
         }
      ]
   }
);
{ "acknowledged" : true, "insertedId" : 101 }

手順2:作成したドキュメントを確認する

find() メソッドと pretty() メソッドを組み合わせることで、コレクション内のすべてのドキュメントを見やすい整形された形式で表示できます。

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

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

{
   "_id" : 101,
   "StudentName" : "Larry",
   "StudentAge" : 21,
   "StudentDetails" : [
      {
         "StudentCountryName" : "US",
         "StudentFavouriteSubjectList" : [ ]
      }
   ]
}

手順3:$push演算子でサブドキュメントを追加する

次に、update() メソッドと $push 演算子を組み合わせて、「StudentDetails」配列に新しいサブドキュメントを追加します。

> db.subDocumentToSubDocumentDemo.update(
   { "_id": 101 },
   {
      "$push": {
         "StudentDetails": {
            "StudentCountryName" : "UK",
            "StudentFavouriteSubjectList" : ["MongoDB","Java" ]
         }
      }
   }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

実行結果の WriteResult 内で「nModified」が1になっていることから、ドキュメントが正常に更新されたことがわかります。

手順4:更新後のデータを確認する

もう一度すべてのドキュメントを表示して、サブドキュメントが正しく追加されたか確認しましょう。

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

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

{
   "_id" : 101,
   "StudentName" : "Larry",
   "StudentAge" : 21,
   "StudentDetails" : [
      {
         "StudentCountryName" : "US",
         "StudentFavouriteSubjectList" : [ ]
      },
      {
         "StudentCountryName" : "UK",
         "StudentFavouriteSubjectList" : [
            "MongoDB",
            "Java"
         ]
      }
   ]
}

このように、「StudentDetails」配列の末尾に「StudentCountryName:UK」のサブドキュメントが新しく追加されていることが確認できます。

補足:最新のMongoDBでの推奨メソッド

なお、現在のMongoDBでは非推奨となっている update() の代わりに、単一ドキュメントを更新する updateOne()、複数ドキュメントを更新する updateMany() の使用が推奨されています。基本的な $push 演算子の書き方はどちらのメソッドでも同様です。

  1. MongoDBで配列の要素を削除するには?$pull演算子の使い方を解説

    MongoDBで配列から要素を削除する基本MongoDBで配列内の要素を削除したい場合は、$pull演算子を使用します。$pullは、既存の配列から指定した値、または条件に一致するすべてのインスタンスを取り除くための更新演算子です。この記事では、実際にコレクションを作成し、ネストされた配列から特定の要素を削除する手順を順番に解説します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。ここでは「software」フィールドの中に「services」という配列を持つドキュメントを挿入します。db.demo541.insertOne({software:{servic

  2. MongoDBアグリゲーションで配列内の要素サブセットを合計する方法

    MongoDBのアグリゲーションパイプラインを使用して、配列内の一部の要素(サブセット)を合計したい場合があります。そんなときは、$first演算子と$sum演算子を組み合わせることで実現できます。この記事では、実際のコレクションを作成しながら、具体的な手順をサンプルコード付きでわかりやすく解説します。1. サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。以下の例では、数値の配列「Values」を持つドキュメントをinsertOne()メソッドで挿入しています。> db.demo610.insertOne({Values:[10,20,30,40,50]}