MongoDBで配列要素をグループ化し、同じ価格の製品数をカウントする方法
MongoDBで配列内のアイテムをグループ化するには、$group演算子を$sortと組み合わせて使用します。この記事では、実際にコレクションを作成しながら、同じ価格の製品をカウントする手順を詳しく解説します。
サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。以下の例では、複数の製品情報(ProductInformation)を配列として持つドキュメントを挿入します。
> db.demo566.insertOne(
... {
...
... "ProductInformation" : [
... {
... "ProductName" : "Product-1",
... "ProductPrice" :100
... },
... {
... "ProductName" : "Product-2",
... "ProductPrice" :1100
... },
... {
... "ProductName" : "Product-3",
... "ProductPrice" :100
... },
... {
... "ProductName" : "Product-4",
... "ProductPrice" :1100
... },
... {
... "ProductName" : "Product-5",
... "ProductPrice" :100
... }
... ]
...
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e908e2339cfeaaf0b97b57a")
}insertOne()メソッドを実行すると、ドキュメントが正常に挿入されたことを示す確認結果が返されます。
find()メソッドでドキュメントを確認する
find()メソッドを使用して、コレクション内のすべてのドキュメントを表示してみましょう。
> db.demo566.find();
このクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e908e2339cfeaaf0b97b57a"), "ProductInformation" : [
{ "ProductName" : "Product-1", "ProductPrice" : 100 },
{ "ProductName" : "Product-2", "ProductPrice" : 1100 },
{ "ProductName" : "Product-3", "ProductPrice" : 100 },
{ "ProductName" : "Product-4", "ProductPrice" : 1100 },
{ "ProductName" : "Product-5", "ProductPrice" : 100 }
] }配列要素をグループ化する集計クエリ
以下は、配列内のアイテムをグループ化し、価格ごとの製品数をカウントするためのクエリです。処理の流れは次のとおりです。
- $unwind:ProductInformation配列を展開し、各要素を個別のドキュメントとして扱えるようにします。
- $group:ProductPriceをキーとしてグループ化し、$sumで各グループの件数をカウントします。
- $sort:結果を_id(価格)の昇順に並べ替えます。
> db.demo566.aggregate([
... {
... "$unwind": "$ProductInformation"
... },
... {
... "$group": {
... "_id": "$ProductInformation.ProductPrice",
... "Value": { "$sum" : 1 }
... }
... },
... { "$sort": { "_id" :1 } }
... ])このクエリを実行すると、以下のような出力が得られます。
{ "_id" : 100, "Value" : 3 }
{ "_id" : 1100, "Value" : 2 }結果の解釈
出力結果から、価格100の製品が3つ、価格1100の製品が2つ存在することがわかります。このように、$unwindで配列を展開してから$groupで集計することで、ネストされた配列データでも柔軟にグループ化処理を行うことができます。在庫管理や価格分析など、さまざまなシーンで応用できるテクニックです。
-
MongoDBでIDを並べ替えてアイテムを逆順に取得する方法
MongoDBでは、$naturalを使用するとドキュメントが自然順(natural order)で返されます。この順序を逆にしたい場合は、$natural:-1を指定します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo710.insertOne({id:101,Name:"Robert"}); { "acknowledged" : true, "insertedId" : ObjectId("5ea83a855d33e20ed1097b7a&quo
-
MongoDBで配列の要素数をカウントし、新しいフィールドに表示する方法
ドキュメント内の配列要素の数をカウントするには、MongoDBの $size 演算子を使用します。$size は集計パイプライン(aggregate)の中で利用でき、指定した配列フィールドに含まれる要素の総数を数値として返します。ここでは、実際にコレクションを作成しながら、配列要素数をカウントして新しいフィールドに表示する手順を解説します。1. コレクションの作成まず、ドキュメントを挿入してコレクションを作成します。各ドキュメントには科目名を格納する配列フィールド「ListOfSubject」を持たせます。> db.demo703.insertOne({ListOfSubject:[My