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

MongoDBの埋め込み配列から特定の要素を取得する方法

MongoDBの埋め込み配列から特定の要素を抽出するには

MongoDBでは、ドキュメント内に埋め込まれた配列から特定の条件に一致する要素だけを取り出したいケースがよくあります。そのような場合は、集計フレームワーク(aggregate())の $match ステージをドット記法と組み合わせて使用します。この記事では、実際のコード例を通じて具体的な手順を解説します。

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

まず、商品情報を埋め込み配列として持つドキュメントを含むコレクションを作成しましょう。

> db.demo641.insert(
...    {
...       ProductId:101,
...       "ProductInformation": [
...          { ProductName:"Product-1", "ProductPrice":1000 },
...          { ProductName:"Product-2", "ProductPrice":500 },
...          { ProductName:"Product-3", "ProductPrice":2000 },
...          { ProductName:"Product-4", "ProductPrice":3000 }
...       ]
...    }
... );
WriteResult({ "nInserted" : 1 })

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

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

> db.demo641.find();

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

{
    "_id" : ObjectId("5e9c31d46c954c74be91e6e2"), "ProductId" : 101, "ProductInformation" : [
       { "ProductName" : "Product-1", "ProductPrice" : 1000 },
       { "ProductName" : "Product-2", "ProductPrice" : 500 },
       { "ProductName" : "Product-3", "ProductPrice" : 2000 },
       { "ProductName" : "Product-4", "ProductPrice" : 3000 }
    ]
}

3. 埋め込み配列から特定の要素を取得するクエリ

以下は、埋め込み配列 ProductInformation から、ProductPrice が 1000 または 2000 の要素だけを抽出するクエリです。$unwind で配列をドキュメント単位に分解し、$match で条件に一致する要素に絞り込み、$project で不要なフィールド(_id)を除外しています。

> db.demo641.aggregate([
... {$unwind: "$ProductInformation"},
... {$match: { "ProductInformation.ProductPrice": {$in :[1000, 2000]}} },
... {$project: {_id: 0, ProductInformation: 1} }
... ]).pretty();

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

{
    "ProductInformation" : {
       "ProductName" : "Product-1",
       "ProductPrice" : 1000
    }
}
{
    "ProductInformation" : {
       "ProductName" : "Product-3",
       "ProductPrice" : 2000
    }
}

まとめ

このように、$unwind で埋め込み配列を個々のドキュメントに展開し、$match をドット記法と併用して条件に一致する要素だけを抽出することで、MongoDBの埋め込み配列から目的のデータを効率的に取得できます。条件を変更すれば、価格帯や商品名など、さまざまな条件での絞り込みにも応用可能です。

  1. MongoDBのAggregateでドキュメントと配列要素の平均値を取得する方法

    MongoDBでドキュメントのフィールドおよび配列内の各要素の平均値を求めるには、aggregate()メソッドと$groupステージを組み合わせ、平均を計算する$avg演算子を使用します。ここでは、実際にサンプルコレクションを作成しながら、具体的な手順を解説します。 サンプルコレクションの作成 まず、insertOne()メソッドを使ってドキュメントを挿入し、コレクションを作成します。 > db.demo598.insertOne( ...    { ...       Information:Student, ...   &

  2. MongoDBで特定フィールドの配列要素数を取得する方法($size演算子の使い方)

    MongoDBでドキュメント内の特定フィールド(配列)に含まれる要素の数をカウントしたい場合は、集計パイプライン(aggregate)と$size演算子を組み合わせるのが最も簡単な方法です。この記事では、実際のコレクションを作成しながら、配列要素数を取得する具体的な手順を解説します。1. サンプルコレクションの作成まず、配列型のフィールド「Subject」を持つドキュメントを含むコレクションを作成します。> db.demo723.insertOne({Subject:[MySQL,MongoDB]}); { acknowledged : true, insertedId