Mongo笔记11-聚合

聚合操作处理数据记录并返回计算结果。聚合来自多个文档的操作组值,并可以对分组的数据执行各种操作以返回单个结果。MongoDB提供了三种执行聚合的方法:聚合管道、map-reduce函数和单一用途的聚合方法。

Aggregation Pipeline

MongoDB的聚合框架是基于数据处理管道的概念建模的。文档进入一个多阶段管道,该管道将文档转换为聚合结果。

最基本的管道阶段提供的筛选器操作类似于修改输出文档的形式的查询和文档转换。

其他管道操作提供按特定字段分组和排序文档的工具,以及聚合数组(包括文档数组)内容的工具。此外,管道阶段可以使用运算符执行计算平均值或连接字符串等任务。

管道使用MongoDB中的本地操作提供了高效的数据聚合,是MongoDB中数据聚合的首选方法。

聚合管道可以对分片集合进行操作。

聚合管道可以在其某些阶段使用索引来改进其性能。此外,聚合管道有一个内部优化阶段。有关详细信息,请参见管道操作符和索引以及聚合管道优化。

详细介绍:

https://docs.mongodb.com/manual/reference/method/db.collection.aggregate/#db.collection.aggregate

Mongo笔记11-聚合

Map-Reduce

MongoDB还提供了map-reduce操作来执行聚合。通常,map-reduce操作有两个阶段:处理每个文档并为每个输入文档发出一个或多个对象的map阶段,以及组合map操作输出的reduce阶段。另外,map-reduce可以有一个finalize阶段来对结果进行最终修改。与其他聚合操作一样,map-reduce可以指定一个查询条件来选择输入文档以及对结果进行排序和限制。

map -reduce使用定制的JavaScript函数来执行映射和reduce操作,以及可选的finalize操作。与聚合管道相比,自定义JavaScript提供了很大的灵活性,但一般来说,map-reduce的效率较低,而且比聚合管道更复杂。

Map-reduce可以对分片集合进行操作。Map-reduce操作还可以输出到分片集合。有关详细信息,请参见聚合管道和分片集合以及Map-Reduce和分片集合。

详细介绍:https://docs.mongodb.com/manual/reference/method/db.collection.mapReduce/#db.collection.mapReduce

Mongo笔记11-聚合

Single Purpose Aggregation Operations

MongoDB also provides db.collection.estimatedDocumentCount()db.collection.count() and db.collection.distinct().

所有这些操作都从单个集合聚合文档。虽然这些操作提供了对公共聚合流程的简单访问,但是它们缺乏聚合管道和map-reduce的灵活性和功能

Mongo笔记11-聚合

详细介绍:

https://docs.mongodb.com/manual/reference/method/db.collection.estimatedDocumentCount/

https://docs.mongodb.com/manual/reference/method/db.collection.count/

https://docs.mongodb.com/manual/reference/method/db.collection.distinct/

 

> db.data_test.estimatedDocumentCount()

40000000

> db.data_test.count()

40000000

> db.data_test.count({key:"t1"})

0

> db.data_test.count({key:"tag1"})

20011

>