首页 > 其他分享 >聚合

聚合

时间:2025-01-17 09:41:13浏览次数:1  
标签:聚合 记录 字段 分组 阶段 流水线

聚合

2.7.4

聚合是一种数据批处理的操作。聚合操作可以将数据分组(或者不分组,即只有一组/每个记录都是一组)然后对每组数据执行多种批处理操作,最后返回结果。有了聚合能力,可以方便的解决很多没有聚合能力时无法实现或只能低效实现的场景,这类场景的例子有:

  1. 分组查询:比如按图书类别获取各类图书的平均销量,这对关系型数据库就是一个 groupBy + avg 的操作,但在现有能力下因没有分组能力和求统计值的能力,因此只能全量取数据后统计,既增加大量网络流量和延时又对本地算力和性能有较大消耗。
  2. 只取某些字段的统计值或变换值返回:比如假设图书集合中每个图书记录中存放了一个数组字段代表每月销量,而此时我们想要获取每个图书的月平均销量,即希望取数组字段的平均值而不希望取多余数据再本地计算,这种场景下不使用聚合是无法实现的。
  3. 流水线式分阶段批处理:比如求各图书类别的总销量最高的作者和最低的作者的操作,就涉及到先分组、再排序、再分组的分阶段的批处理操作,这种场景也是需要聚合能力才能完成的。
  4. 获取唯一值(去重):比如获取某个类别的图书的所有作者名,需去重
  5. ...

以下是一个最简的分组查询示例,采用上述分组查询引用的例子

const db = wx.cloud.database()
const $ = db.command.aggregate
db.collection('books').aggregate()
  .group({
    // 按 category 字段分组
    _id: '$category',
    // 让输出的每组记录有一个 avgSales 字段,其值是组内所有记录的 sales 字段的平均值
    avgSales: $.avg('$sales')
  })
  .end()

上述代码首先将 books 集合的数据按 category 字段分组(分组后每组成为一个记录,_id 为分组所依据的字段值,其他字段都是统计值),然后分别取组内的 sales 字段的平均值。

聚合流水线

聚合是一个流水线式的批处理作业,一个流水线作业包含多个批处理阶段,每个阶段接收来自上一个阶段的输入记录列表(如果是第一个阶段则是集合全集)然后处理成新的记录列表后输出给下一个阶段,直至返回结果。

聚合阶段 & 操作符

一个聚合阶段是一个将一批输入记录按开发者指定的规则转换为新一批输出记录的过程。一个阶段的输出记录数与其输入记录数无关,即可以保持不变,每个输入记录对应一个输出记录,也可以合并或分组输出更少的一个或多个记录,甚至于输出更多的记录。一个聚合流水线操作的第一个阶段是流水线的开始,接收集合所有记录作为输入,最后一个阶段是流水线的结束,其结果作为输出返回给调用方。要定义一个阶段,首先要确定要使用的阶段,聚合能力提供了包括分组阶段 group、排序阶段 sort、投影阶段 project 等多种可选的阶段。每个阶段又可以通过一个对象作为参数定义这个阶段操作的具体行为表现,其中参数对象的每一个字段的值都必须是一个表达式(见下)或聚合操作符,一个操作符可以接收表达式作为输入(常量、字段引用等)。可用的操作符列表可以在文档中找到。

API

可查看文档一览所有的聚合 API,包括所有聚合流水线阶段、聚合操作符发起聚合操作发起聚合请求的接口。

表达式

在聚合中,一个表达式可以是字段(路径)引用、常量、对象表达式、或操作符表达式,并且可以嵌套使用表达式。

字段(路径)引用

通过字段(路径)引用可以引用一个字段的值,以一个 $ 开头的字符串代表字段(路径)引用,比如 $exam 表示引用 exam 字段,如果是嵌套字段或数组,也可以通过点表示法和数组下标表示法取引用,比如 $exam.math 表示引用 exam 字段对象下的 math 字段,$score[0] 表示引用数组字段 score 的第一个元素。

常量

可以是数字、字符串等常量,如果要使用一个以 $ 开头的字符串常量,需要使用 literal 表示这是一个常量而不是字段引用。

对象表达式

对象表达式即一个每个字段的值都是一个表达式的对象。

优化执行效率

因为每一个聚合操作是要输入整一个集合的数据的,因此有以下基本使用原则:

利用索引

matchsort 如果是在流水线的开头的话是可以利用索引的。geoNear 也可以利用地理位置索引,但要注意的是,geoNear 必须是流水线的第一个阶段。

尽早缩小数据集

只要需要的不是集合的全集,那就应该尽早的通过 matchlimitskip 缩小要处理的记录数量。

注意事项

match 参数语法同普通查询语法

除了 match 阶段,在各个聚合阶段中传入的对象可使用的操作符都是聚合操作符,需要特别注意的是,match 进行的是查询匹配,因此语法同普通查询(where)的语法,用的是普通查询操作符,示例可见 match API 文档

小程序端 limit 默认 20,但支持更多

小程序端 limit 默认 20,但允许设置更大的值。

联表查询

使用 lookup 阶段可以完成联表查询。

标签:聚合,记录,字段,分组,阶段,流水线
From: https://www.cnblogs.com/AtlasLapetos/p/18647503

相关文章

  • 计算机毕业设计Springboot云聚合支付平台 基于SpringBoot的云聚合支付解决方案 Spring
    计算机毕业设计Springboot云聚合支付平台6noy0741(配套有源码程序mysql数据库论文)本套源码可以先看具体功能演示视频领取,文末有联xi可分享随着电子商务和移动互联网的飞速发展,支付方式和支付渠道日益多样化,用户对支付体验的要求也越来越高。商户为了满足不同用户的需求,需......
  • reduce 到底是什么?Java8 Stream 的终极聚合工具详解
    reduce()是JavaStreamAPI提供的一个终端操作方法,用于将流中的元素组合起来生成一个单一的值。这一方法非常强大,可以实现累积、聚合、拼接等功能,适用于各种数据处理场景。1.reduce()方法的作用reduce()是一个通用的归约操作,它通过一个关联函数,逐个处理流中的每个元素,将......
  • 组合和聚合
    一、组合1.概念组合的意思是从属关系,主体对象被销毁时,被组合的对象也要被销毁,例如:人(主体)与脑子2.组合关系的设计思想(1)主体创建时,主体的组合对象也要创建(初始化)。(2)主体销毁时,主体的组合对象也要销毁。3.组合关系实现(1)被组合对象作为非指针类型的数据成员声明方式如图1-1......
  • 深入探讨聚合函数(COUNT, SUM, AVG, MAX, MIN):分析和总结数据的新视野
    title:深入探讨聚合函数(COUNT,SUM,AVG,MAX,MIN):分析和总结数据的新视野date:2025/1/13updated:2025/1/13author:cmdragonexcerpt:在数据分析和数据库管理领域,聚合函数(AggregateFunctions)是获取数据总结和统计信息的关键工具。聚合函数如COUNT、SUM、AVG、M......
  • 深入探讨聚合函数(COUNT, SUM, AVG, MAX, MIN):分析和总结数据的新视野
    title:深入探讨聚合函数(COUNT,SUM,AVG,MAX,MIN):分析和总结数据的新视野date:2025/1/13updated:2025/1/13author:cmdragonexcerpt:在数据分析和数据库管理领域,聚合函数(AggregateFunctions)是获取数据总结和统计信息的关键工具。聚合函数如COUNT、SUM、AVG、M......
  • 第四章 链路聚合与生成树配置
    想做一个自己学习的有关的csdn账号,努力奋斗......会更新我计算机网络实验课程的所有内容,还有其他的学习知识^_^,为自己巩固一下所学知识,下次更新路由器基本配置与应用。我是一个萌新小白,有误地方请大家指正,谢谢^_^文章目录目录前言一、实验原理1.为什么使用链路聚合技......
  • DDD - 聚合、聚合根、仓库与工厂
    文章目录Pre概述聚合的设计思路聚合根——外部访问的唯一入口聚合的设计实现实现一个仓库(Repository)去完成对数据库的访问仓库vs数据访问层(DAO)DDD的工厂DDD的仓库通过ID去获取某个领域对象通过某些条件查询Code1.领域模型订单(Order)和订单明细(OrderItem)2.仓库......
  • 聚合根和聚合服务的使用有什么好处
    在业务领域中,聚合根和聚合服务的使用具有以下好处:聚合根的好处•维护数据一致性:聚合根作为聚合的管理者,负责协调聚合内部的实体和值对象按照固定的业务规则协同完成共同的业务逻辑,从而避免了由于复杂数据模型缺少统一的业务规则控制,导致聚合、实体之间数据不一致的问题.•......
  • 数据查询优化策略: 全聚合下推、分区剪枝、部分聚合下推以及动态数据迁移
    关于数据虚拟化在逻辑数据仓库(LogicalDataWarehouse)和逻辑数据湖(LogicalDataLake)架构中查询优化的实际应用示例。本文将为您详细介绍这些场景中最重要的优化技术,包括 全聚合下推(FullAggregationPushdown)、分区剪枝(PartitionPruning)、部分聚合下推(PartialAggregationP......
  • 腾讯云轻量服务器搭建彩虹聚合 DNS 聚合管理系统教程
    彩虹聚合DNS管理系统具备诸多实用功能,其中包括SSL证书申请与自动部署功能,它能够从多个渠道申请SSL证书,像Let'sEncrypt等,并自动将证书部署到各式各样的面板、云服务商以及服务器等环境中,同时还支持CNAME代理功能,为域名管理和安全访问提供了有力保障。一、支持的SSL证......