mongodb聚合操作之Aggregation Pipeline

·  阅读 347

1. Aggregation Pipeline简介

聚合功能可以把数据像 放入传送带一样,先把原始数据按照一定的规则进行筛选处理,然后通过多个不同的数据处理阶处理数据,最终输出一个汇总的结果

Pipeline 是什么呢?英文直译为“管道”,可以形象的比喻为,将原始数据经过多条“管道”进行聚合处理,然后经过最后一道管道进行聚合处理以后,将聚合结果返回;其中每一个“管道”的处理流程,在官方文档中有一个术语,叫做Pipeline Stage,既是每一个 pipeline 阶段;MongoDB 为每一个 pipeline stage 提供了一系列的 operators 操作来完成聚合处理操作;

使用 MongoDB Pipeline 的优势是,MongoDB 提供了许多内置的( native )的方法( 就是指这些 operators )来帮助高效的进行数据的聚合处理;

Aggregation Pipeline 可以在分片集群上进行处理;

以下是官网的一个演示Aggregation Pipline功能的过程图

启动 Aggregation Pipeline,包含两个部分

通过 db.collection.aggregate() 方法启动

通过 aggregate 命令启动,例如:

db.runCommand( {

aggregate: "articles",

pipeline: [

{ $project: { tags: 1 } },

{ unwind:"unwind: "tags" },

{ group: { \_id: "tags", count: { $sum : 1 } } }

],

cursor: { }

} )

Pipeline 的执行过程由一系列的 Aggregation Stages 组成

每一个 Stages 又可以包含多个 Pipeline Expressions 来为每个文档进行更深入的操作;该部分又分为两个部分,

常规的 expressions

accumulator expressions

2. mongodb aggregate操作

说明:

计算集合中的数据的聚合值。

语法:

db.collection.aggregate(pipeline, options)

参数讲解:

pipeline:数组(Array)数据聚合操作或阶段的序列。有关详细信息,请参阅聚合管道操作符

options:可选的。aggregate()传递给aggregate命令的其他选项。仅当您将管道指定为数组时可用。选项可以包含以下字段和值:

2.1. aggregate options参数

2.1.1. explain

boolean类型,可选的。指定返回关于管道处理的信息。有关示例,请参见聚合管道操作的返回信息,在多文档事务中不可用。示例:db.orders.explain().aggregate([

{ $match: { status: "A" } },

{ group: { \_id: "cust_id", total: { sum:"sum: "amount" } } },

{ $sort: { total: -1 } }

])

db.orders.aggregate(

[

{ $match: { status: "A" } },

{ group: { \_id: "cust_id", total: { sum:"sum: "amount" } } },

{ $sort: { total: -1 } }

],

{

explain: true

}

)

2.1.2. allowDiskUse

boolean类型,可选的。允许写入临时文件。当设置为true时,聚合操作可以将数据写入dbPath目录中的_tmp子目录。有关示例,请参见使用外部排序执行大型排序操作。从MongoDB 4.2开始,如果任何聚合阶段由于内存限制而将数据写到临时文件,则分析器日志消息和诊断日志消息包括一个usedDisk指示器。示例:

var results = db.stocks.aggregate(

[

{ $project : { cusip: 1, date: 1, price: 1, _id: 0 } },

{ $sort : { cusip : 1, date: 1 } }

],

{

allowDiskUse: true

}

)

2.1.3. cursor

可选的。指定游标的初始批处理大小。游标字段的值是一个字段batchSize的文档。有关语法和示例,请参见指定初始批处理大小。示例:cursor: { batchSize: }

2.1.4. maxTimeMs

可选的。指定处理游标操作的时间限制(以毫秒为单位)。如果没有为maxTimeMS指定值,操作将不会超时。值0显式指定默认的无限制行为。MongoDB使用与db.killOp()相同的机制终止超过分配时间限制的操作。MongoDB只在一个指定的中断点终止一个操作。

2.1.5. bypassDocumentValidation

可选的。仅当指定outout或merge聚合阶段时才适用。使db.collection.aggregate以绕过操作期间的文档验证。这允许插入不满足验证要求的文档。

2.1.6. readConcern

可选的。指定读取关系。

2.1.7. collation

可选的。指定操作要使用的排序规则。

2.1.8. hint

可选的。用于聚合的索引。索引位于对其运行聚合的初始集合/视图上。通过索引名称或索引规范文档指定索引。

2.1.9. comment

可选的。用户可以指定任意字符串来帮助通过数据库分析器、currentOp和日志跟踪操作。通过索引名称或索引规范文档指定索引。

2.1.10. writeConcern

可选的。表示要与outout或merge阶段一起使用的写关注点的文档。通过索引名称或索引规范文档指定索引。忽略对outout或merge阶段使用默认的写入关注。

分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改