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 } }运算
未完待续