9. オブジェクトの集計¶
通常のクエリに加え、MongoDBのAggregationを使用することができます。 グルーピング、データの加算など、複雑な検索条件を指定することができます。
本ガイドでは、SDKからのAPI呼び出しの方法について説明します。
注釈
使用にあたって、演算子の制限や注意事項があります。 事前に 集計(Aggregation) を参照して下さい。
9.1. 集計条件の指定¶
集計に使用するデータは、商品の売り上げ情報を含むObjectがsalesバケットに保存済みとします。
説明のため、一部フィールドは省略しています。
// salesバケットのデータ
{
{"date":"2018-01-01", "shop":"Tokyo", "item":"A", "number":1, "price":100 ... },
{"date":"2018-01-02", "shop":"Osaka", "item":"B", "number":1, "price":75 ... },
{"date":"2018-01-02", "shop":"Osaka", "item":"C", "number":1, "price":250 ... },
{"date":"2018-01-03", "shop":"Tokyo", "item":"A", "number":2, "price":200 ... },
{"date":"2018-01-04", "shop":"Tokyo", "item":"B", "number":2, "price":150 ... }
}
検索の条件は、JSON配列に指定します。 以下の例では、"Tokyo"で販売された商品毎に、売り上げの合計を集計します。
var pipelineBase = @"
[
{ ""$match"": { ""shop"": ""Tokyo"" }},
{ ""$group"": {
""_id"": ""$item"",
""total"": { ""$sum"": ""$price"" }
}
}
]";
var pipeline = NbJsonArray.Parse(pipelineBase);
一致条件を表す"$match"で、販売した"shopが"Tokyo"であるオブジェクトに絞り込みを行います。
その後、"$group"では、商品"item"毎に、売上"price"の和を"total"としてグルーピングします。 _idに指定したフィールドは、グループ識別用のキーとして扱われます。
9.2. 集計の実行¶
Aggregationを使用するためには、AggregateAsync()を呼び出します。 引数にはpipelineを指定します。
var bucket = new NbObjectBucket<NbObject>("sales");
var result = await bucket.AggregateAsync(pipeline);
結果はNbJsonArrayで返却されます。 "item A" 2件、"item B" 1件の売り上げが集計されます。
集計データのイメージは以下の通りです。
[
{"_id": "A", "total": 300},
{"_id": "B", "total": 150},
]
警告
オフラインバケットに対してはAggregationを使用することができません。