前言:通常查询能够经过find方法,但若是是比较复杂的查询或者数据统计的话,find可能就无能为力了,这时也许你须要的是aggregate.mongodb
英文文档中是aggregation pipeline,直译为聚合管道,它能够对数据文档进行变换和组合。聚合管道是基于数据流概念,数据进入管道通过一个或多个stage,每一个stage对数据进行操做(筛选,投射,分组,排序,限制或跳过)后输出最终结果。数据库
示例来源:https://docs.mongodb.com/manual/core/aggregation-pipeline/数组
mongoDB中有许多操做符,在aggregate中每一个stage能够使用的操做符叫作管道操做符,如下列举比较经常使用的管道操做符:spa
操做符 | 简述 |
---|---|
$project | 投射操做符,用于重构每个文档的字段,能够提取字段,重命名字段,甚至能够对原有字段进行操做后新增字段 |
$match | 匹配操做符,用于对文档集合进行筛选 |
$group | 分组操做符,用于对文档集合进行分组 |
$unwind | 拆分操做符,用于将数组中的每个值拆分为单独的文档 |
$sort | 排序操做符,用于根据一个或多个字段对文档进行排序 |
$limit | 限制操做符,用于限制返回文档的数量 |
$skip | 跳过操做符,用于跳过指定数量的文档 |
$lookup | 链接操做符,用于链接同一个数据库中另外一个集合,并获取指定的文档,相似于populate |
$count | 统计操做符,用于统计文档的数量 |
更多操做符介绍详见官网:https://docs.mongodb.com/manual/reference/operator/aggregation/排序
操做符先简单介绍一下,由于里面还能够大有文章,留在下一篇。ip
db.collection.aggregate([])是聚合管道查询使用的方法,参数是数组,每一个数组元素就是一个stage,stage中运用操做符对数据进行处理后再交由下一个stage,直到没有下个stage,就输出最终的结果,而数据的处理则是经过使用操做符,本文先简单介绍了一下有哪些经常使用的操做符,下一篇再详细说明。rem