Loading [MathJax]/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【mongo 系列】聚合知识点梳理

【mongo 系列】聚合知识点梳理

作者头像
阿兵云原生
发布于 2023-02-16 03:26:30
发布于 2023-02-16 03:26:30
3.7K00
代码可运行
举报
文章被收录于专栏:golang云原生newgolang云原生new
运行总次数:0
代码可运行

聚合知识点梳理

什么是聚合数据?

我们先来看看聚合数据

数据聚合(Data Aggregation)是指合并来自不同数据源的数据。. 聚类也称聚类分析,亦称为群集分析,是对于统计数据分析的一门技术, 在许多领域受到广泛应用,包括机器学习数据挖掘,模式识别,图像分析以及生物信息。

什么是聚合查询?

聚合操作处理数据是记录并返回计算结果的

局和操作组的值来自多个文档,可以对分组数据执行各种操作以返回单个结果

聚合操作一般包含下面三类:

  • 单一作用聚合
  • 聚合管道
  • MapReduce

https://docs.mongodb.com/manual/aggregation/

单一作用聚合

mongodb 自身提供如下几个单一作用的聚合函数,这些单一的聚合函数,相对聚合管道和mapReduce 来说不够灵活,也缺乏丰富的功能

  • db.集合名字.estimatedDocumentCount()

粗略的计算文档的个数,是一个估计值

  • db.集合名字.count()

计算文档的数量,是通过聚合来计算的

  • db.集合名字.distinct()

查看某一个字段都有哪些值

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> db.users.find()
{ "_id" : ObjectId("61584aeeee74dfe04dac57e9"), "name" : "xiaokeai", "age" : 25, "hobby" : "reading", "infos" : { "tall" : 175, "height" : 62 }, "school" : "cs" }
{ "_id" : ObjectId("615a56d6bc6afecd2cff8f96"), "name" : "xiaozhu", "age" : 15, "hobby" : "basketball", "infos" : { "tall" : 190, "height" : 70 }, "school" : "sh" }
{ "_id" : ObjectId("615a5856d988690b07c69f64"), "name" : "xiaopang" }
{ "_id" : ObjectId("615a5917d988690b07c69f66"), "name" : "nancy", "age" : 25, "hobby" : "study", "infos" : { "tall" : 175, "height" : 60 }, "school" : "hn" }
{ "_id" : ObjectId("615a5917d988690b07c69f67"), "name" : "job", "age" : 19, "hobby" : "basketball", "infos" : { "tall" : 170, "height" : 70 }, "school" : "nj" }

> db.users.distinct("age")
[ 15, 19, 25 ]

上述例子,使用 db.users.distinct("age") 查看 age 字段存在的 value 有哪些

聚合管道

https://docs.mongodb.com/manual/core/aggregation-pipeline/

聚合管道包含多个阶段,每个阶段在文件通过管道时进行转换,这里的管道,我们可以理解成 linux 里面的管道,下一个指令的输入是上一个指令的输出

db.集合名.aggregate(<pipelines>,<options>)

  • pipelines

一组数据聚合阶段,除了 outMerge,

  • options

可选,聚合操作的其他参数

这里面包含了 查询计划,是否使用临时文件,游标,最大操作时间,读写策略,强制索引 等等

常用的管道聚合阶段

梳理一下常用的管道聚合阶段如下

阶段关键字

描述

$match

筛选条件

$group

分组

$project

显示字段

$lookup

多表关联

$unwind

展开数组

$out

结果汇入新表

$count

$文档计数

$sort ,$skip,$limit

排序和分页

其他的阶段我们查看官网 https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/

例如 $count 的例子

第一个 groupproject 选择显示的字段

MapReduce

https://docs.mongodb.com/manual/core/map-reduce/

MapReduce 操作将大量的数据处理工作拆分成多个线程并行的处理,然后将结果合并在一起

MapReduce 具有如下 2 个阶段:

  • 将具有相同 key 的文档数据整合在一起的 map 阶段
  • 组合 map 操作的结果进行统计输出的 reduce 阶段

可以看一个官网的例子

emit 将 cust_id 和 amount 做成 map 映射,筛选条件是 status:"A",最后把结果放到一张新的集合中,命名为 order_totals

MapReduce 操作语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
do.集合名.mapReduce(<map>,<reduce>,
{
  out:<collection>,query:<document>,
  sort:<document>,limit:<number>,
  finalize:<function>mscope:<document>,
  jsMode:<boolean>,verbose:<boolean>,
  bypassDocumentValidation:<boolean>
}
)
  • map

将数据拆分成键值对,交给 reduce 函数

  • reduce

根据键将值进行统计运算

  • out

可选,将结果汇入到指定表格中

  • query

可选参数,筛选数据的条件,结果是送入 map

  • sort

排序完成后,送入 map

  • limit

限制送入 map 的文档数

  • finalize

可选,修改 reduce 的结果后进行输出

  • scope

可选,指定 map ,reduce ,finalize 的全局变量

  • jsMode

可选,默认是 false, 在 mapreduce 的过程中是否将数据转换成 bson 格式

  • verbose

可选参数,是否在结果中显示时间,默认是 false 的

  • bypassDocumentValidation

可选参数,是否略过数据校验的流程

聚合管道和 MapReduce 的对比

比较项

聚合管道

MapReduce

目的

用于提高聚合任务的性能和可用性

用于处理大数据集,数据巨大的时候,是用哪个 MapReduce 会更方便

特征

可以根据需要重复管道运算符,管道操作不必为每个输入文档都生成一个输出文档

除分组操作外,还可执行复杂的聚合任务以及对不断增长的数据集执行增量聚合

灵活性

限于聚合管道支持的运算符和表达式

自定义 map , reduce 以及 finalize javascript 函数提供了灵活性以及聚合逻辑

输出结果

返回结果作为游标,如果管道包括一个 $out 或者 多个 $merge 阶段,则光标为空

以各种选项 内联,新收集,合并,替换,缩小,返回结果

分片

支持非分片和分片输入集合

支持非分片和分片输入集合

再详细的对比,可以查看官网 https://docs.mongodb.com/manual/reference/map-reduce-to-aggregation-pipeline/

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿兵云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
常用 mongo 操作实际操练
查询数据的时候我们发现,mongodb 自动在我们的文档中加入了 _id 字段,这是一个主键,如果不自己设置的话,mongodb 为默认给我们加上,是一个 24 位的 uuid
阿兵云原生
2023/02/16
2920
硬货来了!轻松掌握 MongDB 流式聚合操作
信息科学中的聚合是指对相关数据进行内容筛选、处理和归类并输出结果的过程。MongoDB 中的聚合是指同时对多个文档中的数据进行处理、筛选和归类并输出结果的过程。数据在聚合操作的过程中,就像是水流过一节一节的管道一样,所以 MongoDB 中的聚合又被人称为流式聚合。
崔庆才
2019/10/08
4.8K0
硬货来了!轻松掌握 MongDB 流式聚合操作
MongoDB 统计 group 操作用不了,试试 mapReduce 吧
今天,同事小张 Q 我, 说自己辛苦花了一天的时间,基于 mongodb 数据库开发的待办统计功能一直报错!
猿芯
2020/07/06
1.1K0
MongoDB中MapReduce使用
玩过Hadoop的小伙伴对MapReduce应该不陌生,MapReduce的强大且灵活,它可以将一个大问题拆分为多个小问题,将各个小问题发送到不同的机器上去处理,所有的机器都完成计算后,再将计算结果合并为一个完整的解决方案,这就是所谓的分布式计算。本文我们就来看看MongoDB中MapReduce的使用。 ---- mapReduce MongoDB中的MapReduce可以用来实现更复杂的聚合命令,使用MapReduce主要实现两个函数:map函数和reduce函数,map函数用来生成键值对序列,map函
江南一点雨
2018/04/02
1.5K0
Mongo散记–聚合(aggregation)&amp; 查询(Query)
工作中使用到Mongo,可是没有系统的学习研究过Mongo,仅对工作过程中,在Mongo的使用过程中的一些知识点做一下记录,并随时补充,达到总结备忘的目的。
全栈程序员站长
2022/07/12
2.5K0
【翻译】MongoDB指南/聚合——聚合管道
【原文地址】https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果。聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果。MongoDB提供了三种执行聚合的方式:聚合管道,map-reduce方法和单一目的聚合操作。 聚合管道 MongoDB的聚合框架模型建立在数据处理管道这一概念的基础之上。文档进入多阶段管道中,管道将文档转换为聚合结果。最基本的管道阶段类似于查询过滤器和修改输出文档形式的文档转换器。 其他的管道为分组和排序提供一些
甜橙很酸
2018/03/08
4.1K0
【翻译】MongoDB指南/聚合——聚合管道
MongoDB中$type、索引、聚合
再次执行db.col.find({“title” : {$type : 2}}).pretty();
别团等shy哥发育
2023/02/25
1.7K0
MongoDB中$type、索引、聚合
mongodb11天之屠龙宝刀(六)mapreduce:mongodb中mapreduce原理与操作案例
mongodb11天之屠龙宝刀(六)mapreduce:mongodb中mapreduce原理与操作案例 一 Map/Reduce简介 MapReduce 是Google公司的核心模型,用于大规模数据集(大于1TB)的并行计算。“映射(Map)”与“化简(Reduce)”的概念是它们的主要思想。MapReduce使用JavaScript作为“查询语言”,能够在多台服务器之间并行执行。MapReduce将负责的运行于大规模集群上的并行计算过程高度地抽象为两个函数(Map和Reduce),利用一个输入<
学到老
2018/03/19
2.1K0
mongodb11天之屠龙宝刀(六)mapreduce:mongodb中mapreduce原理与操作案例
MongoDB 聚合管道(Aggregation Pipeline)
管道概念 POSIX多线程的使用方式中, 有一种很重要的方式-----流水线(亦称为“管道”)方式,“数据元素”流串行地被一组线程按顺序执行。它的使用架构可参考下图: 以面向对象的思想去理解,整个流水
张善友
2018/01/29
2.9K0
MongoDB 聚合管道(Aggregation Pipeline)
MongoDB系列六(聚合).
 一、概念     使用聚合框架可以对集合中的文档进行变换和组合。基本上,可以用多个构件创建一个管道(pipeline),用于对一连串的文档进行处理。这些构件包括筛选(filtering)、投射(projecting)、分组(grouping)、排序(sorting)、限制(limiting)和跳过(skipping)。 二、聚合函数 db.driverLocation.aggregate( {"$match":{"areaCode":"350203"}}, {"$project":{"dr
JMCui
2018/04/23
5K0
MongoDB系列六(聚合).
【mongo 系列】索引浅析
B Tree就是一种常用的数据库索引数据结构,MongoDB采用 B 树做索引,索引创建在colletions 上。
阿兵云原生
2023/02/16
1.7K0
在MongoDB中实现聚合函数
随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据。传统方法存储和处理数据的成本将会随着数据量增长而显著增加。这使得很多组织都在寻找一种经济的解决方案,比如NoSQL数据库,它提供了所需的数据存储和处理能力、扩展性和成本效率。NoSQL数据库不使用SQL作为查询语言。这种数据库有多种不同的类型,比如文档结构存储、键值结构存储、图结构、对象数据库等等。 我们在本文中使用的NoSQL是MongoDB,它是一种开源的文档数据库系统,开发语言为C++。它提供
张善友
2018/01/22
3.9K0
MongoDB必备知识点全面总结
传统的关系型数据库,比如说MySQL,我们已经用的非常熟悉了,那么我们在什么时候需要用到MongoDB呢?传统的关系型数据库在数据操作的“三高”需求以及应对Web2.0的网站需求面前,显得力不从心。
害恶细君
2022/11/22
3.9K0
MongoDB必备知识点全面总结
MongoDB学习|知识点整理
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
技术从心
2019/08/06
2K0
Python | Python交互之mongoDB交互详解
本篇为mongodb篇,包含实例演示,mongodb高级查询,mongodb聚合管道,python交互等内容。
咸鱼学Python
2019/10/09
8.1K0
MongoDB核心概念与基本操作
​   mongodb中的库就类似于传统关系型数据库中库的概念,用来通过不同库隔离不同应用数据。mongodb中可以建立多个数据库。每一个库都有自己的集合和权限,不同的数据库也放置在不同的文件中。默认的数据库为"test",数据库存储在启动指定的data目录中。
别团等shy哥发育
2023/02/25
1.5K0
MongoDB核心概念与基本操作
初试MongoDB数据库
特征: 使用键值(Key Value)储存数据; MongoDB的逻辑结构是一种层次结构,主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。
九旬
2020/10/23
1.3K0
初试MongoDB数据库
了解 MongoDB 看这一篇就够了
MongoDB 是一款流行的开源文档型数据库,从它的命名来看,确实是有一定野心的。MongoDB 的原名一开始来自于 英文单词"Humongous", 中文含义是指"庞大",即命名者的意图是可以处理大规模的数据。
美码师
2019/10/18
1.3K0
了解 MongoDB 看这一篇就够了
MongoDB 新功能介绍-Change Streams
MongoDB 3.6已经GA有一段时间,网络上对于该版本新特性的详细介绍文章比较少为此借机会对部分新特性做一个相对详细的介绍。基于早期MongoDB版本实现如跨平台数据同步、消息通知、ETL及oplog备份等服务时大多依赖于 Tailable Cursors 的方式。当然这样的实现一来相对复杂同时也存在着一些风险(如不同版本oplog兼容性及过滤特定操作类型等)。
MongoDB中文社区
2018/08/14
2.2K0
MongoDB 新功能介绍-Change Streams
MongoDB 数据库的学习与使用详解
​ MongoDB 数据库是一种 NOSQL 数据库,NOSQL 数据库不是这几年才有的,从数据库的初期发展就以及存在了 NOSQL 数据库。数据库之中支持的 SQL 语句是由 IBM 开发出来的,并且最早就应用在了 Oracle 数据库,但是 SQL 语句的使用并不麻烦,就是几个简单的单词:SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY,但是在这个时候有人开始反感于编写 SQL 操作。于是有一些人就开始提出一个理论 —— 不要去使用 SQL ,于是最早的 NOSQL 概念产生了。可是后来的发展产生了一点变化,在 90 年代到 2010 年之间,世界上最流行的数据库依然是关系型数据库,并且围绕着关系型数据库开发出了大量的程序应用。后来又随着移动技术(云计算、大数据)的发展,很多公司并不愿意去使用大型的厂商数据库 —— Oracle 、DB2,因为这些人已经习惯于使用 MYSQL 数据库了,这些人发现在大数据以及云计算的环境下,数据存储受到了很大的挑战,那么后来就开始重新进行了 NOSQL 数据库的开发,但是经过长期的开发,发现 NOSQL 数据库依然不可能离开传统的关系型数据库 (NOSQL = Not Only SQL)。
星哥玩云
2022/08/18
2.1K0
MongoDB 数据库的学习与使用详解
相关推荐
常用 mongo 操作实际操练
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档