MongoDB的聚合操作主要是对数据的批量处理。一般都是将记录按条件分组之后进行一系列求最大值,最小值,平均值的简单操作,也可以对记录进行数据统计,数据挖掘的复杂操作。聚合操作的输入是集中的文档,输出可以是一个文档也可以是多个文档。
MongoDB 提供了三种强大的聚合操作:
- 单目的聚合操作(Single Purpose Aggregation Operation)
- 聚合管道(Aggregation Pipeline)
- MapReduce 编程模型
Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复杂的聚合逻辑。MongoDB不允许Pipeline的单个聚合操作占用过多的系统内存,如果一个聚合操作消耗20%以上的内存,那么MongoDB直接停止操作,并向客户端输出错误消息。
本篇主要讲解 单目的聚合操作(Single Purpose Aggregation Operation)。
一、单目的聚合操作
单目的聚合命令常用的有:count() 和 distinct()。以 distinct() 为例,其工作流程如下:
image
1.1 count
count用于返回集合中的文档数量。
示例
求出集合中 job_base-accdate 值大于 2018-11-06 的文档个数
db.getCollection('job_create').find({'job_base-accdate': {$gt: new Date('06/11/2018')}}).count()
等价于
db.getCollection('job_create').count({'job_base-accdate': {$gt: new Date('06/11/2018')}})
1.2 distinct
distinct用于去重
示例
对 job_base-jid 值进行去重操作
db.getCollection('job_create').distinct('job_base-jid')