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

MongoDBのオブジェクト配列からアイテムを取得する方法

MongoDBでオブジェクト配列からアイテムを取得するには?

MongoDBのドキュメント内にネストされたオブジェクト配列から特定のアイテムを取り出したい場合は、aggregate()メソッドを使用します。集計パイプラインの各ステージを組み合わせることで、配列の展開・絞り込み・集約を柔軟に行えます。

まずは、サンプルコレクションにドキュメントを作成してみましょう。

> db.demo459.insertOne(
... { "_id" : 1,
... "Information" : [
...     {
...        "Name" : "Chris",
...        "_id" : new ObjectId(),
...        "details" : [
...           "HR"
...        ]
...     },
...     {
...        "Name" : "David",
...        "_id" : new ObjectId(),
...        "details" : [
...           "Developer"
...        ]
...     },
...     {
...        "Name" : "Bob",
...        "_id" : new ObjectId(),
...        "details" : [
...           "Account"
...        ]
...     }
... ]
... }
... )
{ "acknowledged" : true, "insertedId" : 1 }

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

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

> db.demo459.find();

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

{ "_id" : 1, "Information" : [ { "Name" : "Chris", "_id" : ObjectId("5e7ef4a7dbcb9adb296c95c9"),
"details" : [ "HR" ] }, { "Name" : "David", "_id" : ObjectId("5e7ef4a7dbcb9adb296c95ca"),
"details" : [ "Developer" ] }, { "Name" : "Bob", "_id" : ObjectId("5e7ef4a7dbcb9adb296c95cb"),
"details" : [ "Account" ] } ] }

aggregate()を使ったアイテムの取得クエリ

それでは、オブジェクト配列から目的のアイテムを取得するための実際のクエリを見てみましょう。

> db.demo459.aggregate([
...     { $unwind: '$Information' },
...     { $unwind: '$Information.details' },
...     { $match: { 'Information.Name': { $in: ["Chris","Bob"]} } },
...     { $group: { _id: null, detailList: { $addToSet: '$Information.details' } } },
... ])

このクエリを実行すると、次のような結果が出力されます。

{ "_id" : null, "detailList" : [ "Account", "HR" ] }

パイプラインの各ステージの解説

上記のクエリでは、以下の4つのステージが順番に処理されています。

$unwind:配列フィールド(Information)を展開し、各要素を個別のドキュメントとして扱えるようにします。2つ目の$unwindで、さらにネストされたdetails配列も展開しています。
$match:条件に一致するドキュメントだけを抽出します。ここでは$in演算子を使い、Nameが「Chris」または「Bob」である要素のみに絞り込んでいます。
$group:_idをnullにすることですべてのドキュメントを1つのグループにまとめます。
$addToSet:重複のない値のリスト(detailList)を生成します。そのため、結果には「Account」と「HR」のみが含まれています。

このようにaggregate()のパイプラインステージを組み合わせれば、ネストされたオブジェクト配列から必要なデータだけを効率的に抽出できます。条件を変更すれば、任意の名前や詳細情報での絞り込みにも簡単に対応可能です。

  1. MongoDBでドキュメント内の配列から特定の値を削除する方法($pull演算子の使い方)

    MongoDBで配列から値を削除したい場合は、$pull 演算子を使用します。$pull は、既存の配列から指定した条件に一致する値(または複数の値)のすべてのインスタンスを取り除くための更新演算子です。1. サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo535.insertOne( ... { ... studentId : 101, ... studentName : Chris, ... ListOfMailIds : [ ... Chris@gmail.com, ... Chr

  2. MongoDBコレクションから一意の値(重複なし)を取得する方法【distinct()の使い方】

    MongoDBでコレクション内の重複データを除外し、一意の値だけを取得したい場合は、distinct()メソッドを使用します。distinct()は、指定したフィールドに含まれる重複しない値を1つのコレクション全体から検索し、その結果を配列として返します。サンプルコレクションの作成まず、insertOne()を使ってドキュメントを挿入し、コレクションを作成します。> db.demo704.insertOne({"LanguageCode":"hi"}); { "acknowledged" : true, &quo