Aggregations operations はデータレコードを処理して計算した結果を返します。 集計操作は、複数の文書から値をグループ化し、グループ化されたデータに対してさまざまな操作を行い、1つの結果を返すことができる。 SQL の count(*) と group by は MongoDB の集約に相当します。
The aggregate() Method
MongoDB で集約を行うには aggregate() メソッドを使う必要があります。
構文
aggregate()メソッドの基本構文は次のとおりです。
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
例
コレクションに次のデータがあるとします。 各ユーザーによって書かれたチュートリアルの数を示すリストを表示したい場合、次の aggregate() メソッドを使用します。
上記の例では、フィールドby_userによってドキュメントをグループ化し、by userの各発生時にsumの前の値が増加します。
Expression | Description | Example |
---|---|---|
$sum | コレクション内のすべてのドキュメントから定義した値をサムアップします。aggregate() | |
$avg | コレクション内のすべてのドキュメントから、与えられた値の平均を計算する。 | db.mycol.aggregate() |
$min | コレクション内の全てのドキュメントから、対応する値の最小値を取得します。 | db.mycol.aggregate() |
$max | コレクション内の全てのドキュメントから対応する値の最大値を取得する。 | db.mycol.aggregate() |
$push | 結果のドキュメントで配列への値の挿入をする。aggregate() | |
$addToSet | 結果のドキュメントに値を配列に挿入するが、重複を作らない。 | db.mycol.aggregate() |
$first | グループ分けに従ってソースドキュメントから最初のドキュメントを取得します。 通常、これは以前に適用された “$sort”-stage. | db.mycol.aggregate() |
$last | グループ化に従ってソースドキュメントから最後のドキュメントを取得する。 | db.mycol.aggregate() |
パイプラインの概念
UNIXコマンドでは、シェルパイプラインとは、ある入力に対して操作を実行しその出力を次のコマンドの入力として使用できることを指します。 MongoDB はアグリゲーションフレームワークで同じ概念をサポートしています。 可能なステージのセットがあり、それぞれが入力としてドキュメントのセットとして受け取られ、結果のドキュメントのセット(またはパイプラインの最後には最終的な結果のJSONドキュメント)が生成されます。
以下は、集約フレームワークで可能なステージです –
-
$project – コレクションからいくつかの特定のフィールドを選択するために使用されます。
-
$match – これはフィルタリング操作であり、したがって、次のステージへの入力として与えられるドキュメントの量を減らすことができます。
-
$group – これは、上で述べたように実際の集計を実行します。
-
$sort – ドキュメントをソートする。
-
$skip – これによって、与えられたドキュメントの量に対してドキュメントのリストで前方にスキップすることが可能である。
-
$limit – 現在の位置から指定された数だけ、見る文書を制限する。
-
$unwind – 配列を使用している文書を展開するのに使用される。 配列を使用している場合、データはあらかじめ結合されているようなもので、この操作を元に戻すと、再び個々の文書になります。