db.collection.aggregate()是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。

聚合管道

一般来说,聚合处理通常就是通过一系列的处理以获得所需要的数据。
例如,假设某公司需要计算当月各产品的销售额并按从高到低进行排序,其处理流程一般如下:

获取当月的所有销售数据统计各产品的总销售额按总销售额降序对产品进行排序

如果是关系数据库,上面的处理通常需要通过多个SQL查询来完成,MongoDB则比较简单,只需一个聚合处理即可完成。上面例子的MongoDB实现代码大致如下:

db.orderes.aggregate([
  { $match: { datetime: /2017-12/g } },
  { $group: { _id: "$item", total: { $sum: "$amount" } } }
  { $sort: { total: -1 } }
]);
阶段 名称说明 /范例$count 指定存放当前阶段中包含记录数的属性名称。 { $count: "total" }

$group

按指定字段(_id)执行分组。通常与集合函数一起使用。。

{ $group: { _id: "$item", total: { $sum: "$amount" } } }

$limit

限定读取记录数

{ $limit: 15 }

$skip

跳过指定数量的记录

{ $skip: 5 } $sort

按指定字段排序。 1是升序,-1是降序。

{ $sort: { total: -1 } } $match

指定查询条件。

{ $match: { datetime: /2017-12/g } } $project

重新格式化要返回的文档。

{ $project: { _id: 0, item: 1, amount: 1 } }


运算

未完待续