为了回应用户对简单数据访问的需求,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”可以返回聚合信息,例如对于每个分组中的实际文档,计算文档整体或部分的数目和平均值。
查看英文原文: http://www.infoq.com/news/2012/02/MongoDB-Aggregation
评论