MongoDB 中的 Group By

  • Jonathan Allen
  • 曹如进

2012 年 3 月 4 日

话题:语言 & 开发AI

为了回应用户对简单数据访问的需求,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

语言 & 开发AI