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

MongoDBで二重ネスト配列を作成する方法


MongoDBで二重ネスト配列(配列の中にさらに配列が入れ子になった構造)を作成するには、ドキュメントを格納するコレクションを作成するクエリを実行します。ここでは、学生の基本情報に加えて、プロジェクト名やそのプロジェクトの開発に使用した技術を二重ネスト配列として保持するドキュメントを作成する例を紹介します。

二重ネスト配列を含むドキュメントの挿入

insertOne()メソッドを使用して、二重ネスト配列を持つドキュメントを挿入します。外側の配列「StudentDetails」にはプロジェクト情報が格納され、その中の「ProjectDetails」配列には使用技術が格納される、3階層のデータ構造になっています。

> db.doubleNestedArrayDemo.insertOne(
... {
...    "StudentId" : "1000",
...    "StudentName" : "Larry",
...    "StudentDetails" : [
...    {
...       "ProjectName" : "Online Banking",
...       "ProjectDetails" : [
...       {
...          "TechnologyUsed" : "Java"
...       },
...       {
...          "TechnologyUsed" : "MySQL in Backend"
...       }
...       ]
...    }
...    ]
... }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c992bd7330fd0aa0d2fe4cc")
}

続いて、もう1件、別の学生のドキュメントを挿入してみましょう。

> db.doubleNestedArrayDemo.insertOne(
... {
...    "StudentId" : "1001",
...    "StudentName" : "Robert",
...    "StudentDetails" : [
...    {
...       "ProjectName" : "Student Web Tracker",
...       "ProjectDetails" : [
...       {
...          "TechnologyUsed" : "Django Framework"
...       },
...       {
...          "TechnologyUsed" : "MongoDB in Backend"
...       }
...       ]
...    }
...    ]
... }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c992cdb330fd0aa0d2fe4cd")
}

挿入したドキュメントの表示

find()メソッドを使用すると、コレクション内のすべてのドキュメントを取得できます。pretty()メソッドを組み合わせることで、整形された読みやすい形式で結果が出力されます。

> db.doubleNestedArrayDemo.find().pretty()

上記のクエリを実行すると、次のような出力が得られます。

{
   "_id" : ObjectId("5c992bd7330fd0aa0d2fe4cc"),
   "StudentId" : "1000",
   "StudentName" : "Larry",
   "StudentDetails" : [
      {
         "ProjectName" : "Online Banking",
         "ProjectDetails" : [
            {
               "TechnologyUsed" : "Java"
            },
            {
               "TechnologyUsed" : "MySQL in Backend"
            }
         ]
      }
   ]
}
{
   "_id" : ObjectId("5c992cdb330fd0aa0d2fe4cd"),
   "StudentId" : "1001",
   "StudentName" : "Robert",
   "StudentDetails" : [
      {
         "ProjectName" : "Student Web Tracker",
         "ProjectDetails" : [
            {
               "TechnologyUsed" : "Django Framework"
            },
            {
               "TechnologyUsed" : "MongoDB in Backend"
            }
         ]
      }
   ]
}

データ構造のポイント

このドキュメントは、以下の3階層で構成されています。

  • 第1階層: StudentId や StudentName など、学生の基本情報
  • 第2階層: StudentDetails 配列内の ProjectName など、プロジェクト情報
  • 第3階層: ProjectDetails 配列内の TechnologyUsed など、使用技術の詳細

なお、二重ネスト配列の特定の要素にアクセスしたい場合は、ドット記法(例:StudentDetails.0.ProjectDetails.1.TechnologyUsed)を使用することで、目的のフィールドを指定して検索や更新を行うことができます。

  1. MongoDBでネストされた配列をソートする方法:$unwindと$sortを活用したクエリ

    MongoDBでドキュメント内に格納されたネストされた配列(サブドキュメントの配列)をソートしたい場合、集計パイプライン(aggregate)を使い、$unwindで配列を展開した後に$sortで並べ替え、最後に$groupで再構成するのが定番のアプローチです。この記事では、実際にコレクションを作成しながら、ネストされた配列をスコア順にソートする手順を解説します。1. サンプルコレクションの作成まず、ネストされた配列「details」を持つドキュメントを挿入してコレクションを作成します。> db.demo505.insertOne( ... { ... details: [ ..

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

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