MongoDB の配列を操作する

MongoDBMongoDBBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、文字列や数値、さらにはネストされたドキュメントなどのアイテムのリストを保持できる強力なデータ構造である MongoDB の配列を扱う方法を学びます。配列フィールドの作成、配列要素の追加、配列アイテムの削除、配列値の更新、および配列コンテンツの照会など、さまざまな操作を検討します。これらのスキルにより、MongoDB の配列に格納されたデータを効果的に管理および操作できるようになります。

この実験では、以下の手順が対象となります。配列フィールドの作成、配列要素の追加、配列アイテムの削除、配列値の更新、および配列コンテンツの照会。この実験が終了するとき、MongoDB の配列をどのように操作するか、およびその機能を活用してデータ管理と照会能力を向上させる方法を十分に理解しているでしょう。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic Operations"]) mongodb(("MongoDB")) -.-> mongodb/QueryOperationsGroup(["Query Operations"]) mongodb(("MongoDB")) -.-> mongodb/DataTypesGroup(["Data Types"]) mongodb(("MongoDB")) -.-> mongodb/ArrayandEmbeddedDocumentsGroup(["Array and Embedded Documents"]) mongodb/BasicOperationsGroup -.-> mongodb/insert_document("Insert Document") mongodb/BasicOperationsGroup -.-> mongodb/update_document("Update Document") mongodb/QueryOperationsGroup -.-> mongodb/find_documents("Find Documents") mongodb/DataTypesGroup -.-> mongodb/work_with_array_data_types("Work with Array Data Types") mongodb/DataTypesGroup -.-> mongodb/manage_array_elements("Manage Array Elements") mongodb/ArrayandEmbeddedDocumentsGroup -.-> mongodb/query_embedded_documents("Query Embedded Documents") subgraph Lab Skills mongodb/insert_document -.-> lab-422084{{"MongoDB の配列を操作する"}} mongodb/update_document -.-> lab-422084{{"MongoDB の配列を操作する"}} mongodb/find_documents -.-> lab-422084{{"MongoDB の配列を操作する"}} mongodb/work_with_array_data_types -.-> lab-422084{{"MongoDB の配列を操作する"}} mongodb/manage_array_elements -.-> lab-422084{{"MongoDB の配列を操作する"}} mongodb/query_embedded_documents -.-> lab-422084{{"MongoDB の配列を操作する"}} end

配列フィールドの作成

このステップでは、MongoDB で配列フィールドを作成する方法を学びます。これにより、単一のドキュメント内に複数の値を格納できます。配列は、文字列や数値、さらにはネストされたドキュメントなどのアイテムのリストを保持できる強力なデータ構造です。

まず、MongoDB シェルを起動しましょう。

mongosh

次に、実験用のデータベースを作成しましょう。

use arraylab

students という名前のコレクションを作成し、配列フィールドを持つドキュメントを挿入します。

db.students.insertOne({
    name: "Alice Johnson",
    age: 22,
    courses: ["Mathematics", "Computer Science", "Physics"]
})

この例を分解してみましょう。

  • courses フィールドを持つ学生用のドキュメントを作成しています。
  • courses フィールドは、3 つの文字列要素を含む配列です。
  • 各学生は、単一のフィールドに複数のコースを格納できます。

ドキュメントを確認するには、取得しましょう。

db.students.find()

出力例:

[
  {
    _id: ObjectId("..."),
    name: 'Alice Johnson',
    age: 22,
    courses: [ 'Mathematics', 'Computer Science', 'Physics' ]
  }
]

また、混合データ型の配列も作成できます。

db.students.insertOne({
    name: "Bob Smith",
    grades: [95, 87, 92],
    activities: ["Chess Club", "Debate Team"]
})

配列要素の追加

このステップでは、MongoDB の既存の配列に要素を追加するためのさまざまな方法を学びます。前のステップで使用した arraylab データベースと students コレクションを引き続き使用します。

まず、MongoDB シェルにいることを確認しましょう。

mongosh

arraylab データベースに切り替えます。

use arraylab

配列に単一の要素を追加するには、$push 演算子を使用します。

db.students.updateOne(
    { name: "Alice Johnson" },
    { $push: { courses: "Data Science" } }
)

更新を確認しましょう。

db.students.find({ name: "Alice Johnson" })

出力例:

[
  {
    _id: ObjectId("..."),
    name: 'Alice Johnson',
    age: 22,
    courses: [ 'Mathematics', 'Computer Science', 'Physics', 'Data Science' ]
  }
]

一度に複数の要素を追加するには、$each を使用した $push を使用します。

db.students.updateOne(
    { name: "Bob Smith" },
    { $push: { activities: { $each: ["Robotics Club", "Swimming Team"] } } }
)

更新を確認します。

db.students.find({ name: "Bob Smith" })

出力例:

[
  {
    _id: ObjectId("..."),
    name: 'Bob Smith',
    grades: [ 95, 87, 92 ],
    activities: [ 'Chess Club', 'Debate Team', 'Robotics Club', 'Swimming Team' ]
  }
]

配列アイテムの削除

このステップでは、MongoDB の配列から特定の要素を削除するためのさまざまな手法を学びます。前のステップで使用した arraylab データベースと students コレクションを引き続き使用します。

まず、MongoDB シェルにいることを確認しましょう。

mongosh

arraylab データベースに切り替えます。

use arraylab

配列から特定の要素を削除するには、$pull 演算子を使用します。

db.students.updateOne(
    { name: "Alice Johnson" },
    { $pull: { courses: "Physics" } }
)

更新を確認しましょう。

db.students.find({ name: "Alice Johnson" })

出力例:

[
  {
    _id: ObjectId("..."),
    name: 'Alice Johnson',
    age: 22,
    courses: [ 'Mathematics', 'Computer Science', 'Data Science' ]
  }
]

複数の特定の要素を削除するには、$pullAll を使用します。

db.students.updateOne(
    { name: "Bob Smith" },
    { $pullAll: { activities: ["Chess Club", "Debate Team"] } }
)

更新を確認します。

db.students.find({ name: "Bob Smith" })

出力例:

[
  {
    _id: ObjectId("..."),
    name: 'Bob Smith',
    grades: [ 95, 87, 92 ],
    activities: [ 'Robotics Club', 'Swimming Team' ]
  }
]

要素の位置で削除したい場合は、$pop 演算子を使用できます。

db.students.updateOne(
    { name: "Alice Johnson" },
    { $pop: { courses: 1 } }  // 最後の要素を削除
)

最終更新を確認します。

db.students.find({ name: "Alice Johnson" })

出力例:

[
  {
    _id: ObjectId("..."),
    name: 'Alice Johnson',
    age: 22,
    courses: [ 'Mathematics', 'Computer Science' ]
  }
]

配列値の更新

このステップでは、MongoDB の配列内の特定の要素をさまざまな手法を使って更新する方法を学びます。前のステップで使用した arraylab データベースと students コレクションを引き続き使用します。

まず、MongoDB シェルにいることを確認しましょう。

mongosh

arraylab データベースに切り替えます。

use arraylab

配列要素のインデックスで特定の要素を更新するには、位置指定演算子 $ を使用します。

db.students.updateOne(
    { name: "Alice Johnson", "courses": "Mathematics" },
    { $set: { "courses.$": "Advanced Mathematics" } }
)

更新を確認しましょう。

db.students.find({ name: "Alice Johnson" })

出力例:

[
  {
    _id: ObjectId("..."),
    name: 'Alice Johnson',
    age: 22,
    courses: [ 'Advanced Mathematics', 'Computer Science' ]
  }
]

複数の配列要素を更新するには、$[](すべての要素)または $[<識別子>](フィルタリングされた要素)を使用します。

db.students.updateOne(
    { name: "Bob Smith" },
    { $mul: { "grades.$[]": 1.1 } }  // すべての点数を10%増やす
)

更新を確認します。

db.students.find({ name: "Bob Smith" })

出力例:

[
  {
    _id: ObjectId("..."),
    name: 'Bob Smith',
    grades: [ 104.5, 95.7, 101.2 ],
    activities: [ 'Robotics Club', 'Swimming Team' ]
  }
]

また、$addToSet を使って配列に一意の要素を追加することもできます。

db.students.updateOne(
    { name: "Alice Johnson" },
    { $addToSet: { courses: "Data Science" } }
)

最終更新を確認します。

db.students.find({ name: "Alice Johnson" })

出力例:

[
  {
    _id: ObjectId("..."),
    name: 'Alice Johnson',
    age: 22,
    courses: [ 'Advanced Mathematics', 'Computer Science', 'Data Science' ]
  }
]

配列コンテンツの照会

このステップでは、MongoDB で配列コンテンツに基づいてドキュメントを照会およびフィルタリングする方法を学びます。前のステップで使用した arraylab データベースと students コレクションを引き続き使用します。

まず、MongoDB シェルにいることを確認しましょう。

mongosh

arraylab データベースに切り替えます。

use arraylab

配列に特定の要素が含まれるドキュメントを検索するには、直接照合を使用します。

db.students.find({ courses: "Data Science" })

出力例:

[
  {
    _id: ObjectId("..."),
    name: 'Alice Johnson',
    age: 22,
    courses: [ 'Advanced Mathematics', 'Computer Science', 'Data Science' ]
  }
]

複数の特定の要素を含む配列を持つドキュメントを照会するには、$all 演算子を使用します。

db.students.find({
    courses: { $all: ["Advanced Mathematics", "Computer Science"] }
})

配列要素が条件に一致するドキュメントを検索するには、$elemMatch 演算子を使用します。

db.students.find({
    grades: { $elemMatch: { $gt: 100 } }
})

この照会は、少なくとも 1 つの点数が 100 を超えるドキュメントを検索します。

配列内の要素数をカウントするには、$size 演算子を使用します。

db.students.find({
    activities: { $size: 2 }
})

この照会は、正確に 2 つの活動を持つドキュメントを検索します。

より複雑な照会を示すために、もう 1 つのドキュメントを追加しましょう。

db.students.insertOne({
    name: "Charlie Brown",
    courses: ["Art", "Music", "Literature"],
    grades: [88, 92, 85],
    activities: ["Painting Club"]
})

次に、複数の条件を組み合わせたより複雑な照会を行いましょう。

db.students.find({
    $and: [
        { courses: { $in: ["Art", "Music"] } },
        { grades: { $elemMatch: { $gte: 90 } } }
    ]
})

この照会は、コースに "Art" または "Music" が含まれ、かつ少なくとも 1 つの点数が 90 以上である学生を検索します。

まとめ

この実験では、MongoDB で配列フィールドを作成し、既存の配列に要素を追加し、配列アイテムを削除し、配列値を更新し、配列コンテンツを照会する方法を学びました。まず、students と呼ばれるデータベースとコレクションを作成し、その後、coursesgrades のような配列フィールドを持つドキュメントを挿入しました。その後、新しい要素を追加するために $push 演算子、アイテムを削除するために $pull 演算子、配列値を更新するために $set 演算子など、配列を操作するさまざまな方法を検討しました。最後に、$in 演算子と $all 演算子を使用して配列コンテンツを照会する方法を学びました。この実験では、MongoDB での配列の操作に関する包括的な概要を提供し、MongoDB アプリケーションでこの強力なデータ構造を効率的に管理および利用するための必要なスキルを身に付けました。