为了回应用户对简单数据访问的需求,MongoDB推出了聚合框架(Aggregation Framework)。该框架使用声明性管道符号来支持类似于SQL Group By操作的功能,而不再需要用户编写自定义的Javascript例程。
大部分管道操作会在“aggregate”子句后会跟上“$match”打头。它们用在一起,就类似于SQL的from和where子句,或是 MongoDB的find函数。“$project”子句看起来也非常类似SQL或MongoDB中的某个概念(和SQL不同的是,它位于表达式尾端)。
接下来介绍的操作在MongoDB聚合框架中是独一无二的。与大多数关系数据库不同,MongoDB天生就可以在行/文档内存储数组。尽管该特性对 于全有全无的数据访问十分便利,但是它对于需要组合投影、分组和过滤操作来编写报告的工作,却显得相当复杂。“$unwind”子句将数组分解为单个的元 素,并与文档的其余部分一同返回。
“$group”操作与SQL的Group By子句用途相同,但是使用起来却更像是LINQ中的分组运算符。与取回一行平面数据不同,“$group”操作的结果集会呈现为一个持续的嵌套结构。正 因如此,使用“$group”可以返回聚合信息,例如对于每个分组中的实际文档,计算文档整体或部分的数目和平均值。