Aggregationとは「集合」を意味する英単語です。MongoDBにおけるAggregationはその名が示す通り、任意のドキュメントをある一定の規則に基づき、一つの集合体として処理することができます。
噛み砕いていうと、「20代女性ユーザーの週末のログイン率をだしたい!」とか「営業部の法人セールスの一人あたりの売上高を知りたい…」のような集計が、Aggregationを使って比較的簡単にできてしまいます。
例えば以下の様な集計処理を行うことができます。
MongoDBのAggregationは、他のRDBMS製品での、GROUP BY
句を使った集計処理と同等の処理を行うことができます。
以下は簡易な対比のリストとなります。(from:SQL to Aggregation Mapping Chart)
db.<コレクション名>.aggregation([
{
$group : { _id : "$<キー名>" }
}
]);
上記コマンドは、キー名でグルーピングする処理になります。SQLにすると下記のような形と同一になります。
SELECT *
FROM <コレクション名>
GROUP BY <キー名> ;
Linuxシェルでパイプして、コマンドの結果を利用するように、MongoDBでもドキュメントの集計結果を後続の処理に渡すことが可能です。
Linuxのパイプの利用例:(from: なんちゃって鶯教さん)
$ history | head # <= historyの出力形式の確認しています(awkのため)
1 20131009 02:37:47 sudo mkdir -p /opt/boxen
2 20131009 02:37:47 ll
3 20131009 02:37:47 ls -l
4 20131009 02:37:47 ls -la /opt/
5 20131009 02:37:47 cd
6 20131009 02:37:47 mkdir repos
7 20131009 02:37:47 cd repos/
8 20131009 02:37:47 alias ll="ls -l"
9 20131009 02:37:47 alias la="ls -la"
10 20131009 02:37:47 la
$ history | awk '{print $4}' | sort | uniq -c | sort -nr | head # <= よく使うコマンドを上位から順番に表示する
391 ll
208 cd
110 ansible-playbook
86 vim
63 vagrant
63 git
62 ssh
47 sudo
44 ls
44 find
上記の例では
4番目の項目(コマンド部分)のみ抜き出した
結果を出力する名前順に並べ替えた
結果を出力する同一のコマンドをまとめてカウントした
結果を出力する数字の大きい順に並び替えた
結果を出力する上位10項目のみ
を出力する