MongoDB的聚合操作主要是對(duì)數(shù)據(jù)的批量處理。一般都是將記錄按條件分組之后進(jìn)行一系列求最大值分蓖,最小值,平均值的簡(jiǎn)單操作尔许,也可以對(duì)記錄進(jìn)行數(shù)據(jù)統(tǒng)計(jì),數(shù)據(jù)挖掘的復(fù)雜操作蒸甜。聚合操作的輸入是集中的文檔余佛,輸出可以是一個(gè)文檔也可以是多個(gè)文檔柠新。
MongoDB 提供了三種強(qiáng)大的聚合操作:
- 單目的聚合操作(Single Purpose Aggregation Operation)
- 聚合管道(Aggregation Pipeline)
- MapReduce 編程模型
Pipeline查詢速度快于MapReduce辉巡,但是MapReduce的強(qiáng)大之處在于能夠在多臺(tái)Server上并行執(zhí)行復(fù)雜的聚合邏輯。MongoDB不允許Pipeline的單個(gè)聚合操作占用過多的系統(tǒng)內(nèi)存憔恳,如果一個(gè)聚合操作消耗20%以上的內(nèi)存,那么MongoDB直接停止操作喇嘱,并向客戶端輸出錯(cuò)誤消息塞栅。
本篇主要講解 單目的聚合操作(Single Purpose Aggregation Operation)。
一放椰、單目的聚合操作
單目的聚合命令常用的有:count() 和 distinct()作烟。以 distinct() 為例砾医,其工作流程如下:
image
1.1 count
count用于返回集合中的文檔數(shù)量。
示例
求出集合中 job_base-accdate 值大于 2018-11-06 的文檔個(gè)數(shù)
db.getCollection('job_create').find({'job_base-accdate': {$gt: new Date('06/11/2018')}}).count()
等價(jià)于
db.getCollection('job_create').count({'job_base-accdate': {$gt: new Date('06/11/2018')}})
1.2 distinct
distinct用于去重
示例
對(duì) job_base-jid 值進(jìn)行去重操作
db.getCollection('job_create').distinct('job_base-jid')