当前位置: 首页 > news >正文

[Mongodb 5.0]聚合操作

 本文对应Aggregation Operations — MongoDB Manual

 

 正文

此章节主要介绍了Aggregation Pipeline,其实就是将若干个聚合操作放在管道中进行执行,每一个聚合操作的结果作为下一个聚合操作的输入,每个聚合指令被称为一个stage。

在正式开始学习聚合操作前,请先按照下面的方式在你的mongodb中创建数据可和插入记录:

首先通过创建数据库和表,我这里为了方便直接使用可视化工具Robo3T(官网推荐)来进行操作

 然后直接通过下面指令添加记录

db.orders.insertMany( [{ _id: 0, name: "Pepperoni", size: "small", price: 19,quantity: 10, date: ISODate( "2021-03-13T08:14:30Z" ) },{ _id: 1, name: "Pepperoni", size: "medium", price: 20,quantity: 20, date : ISODate( "2021-03-13T09:13:24Z" ) },{ _id: 2, name: "Pepperoni", size: "large", price: 21,quantity: 30, date : ISODate( "2021-03-17T09:22:12Z" ) },{ _id: 3, name: "Cheese", size: "small", price: 12,quantity: 15, date : ISODate( "2021-03-13T11:21:39.736Z" ) },{ _id: 4, name: "Cheese", size: "medium", price: 13,quantity:50, date : ISODate( "2022-01-12T21:23:13.331Z" ) },{ _id: 5, name: "Cheese", size: "large", price: 14,quantity: 10, date : ISODate( "2022-01-12T05:08:13Z" ) },{ _id: 6, name: "Vegan", size: "small", price: 17,quantity: 10, date : ISODate( "2021-01-13T05:08:13Z" ) },{ _id: 7, name: "Vegan", size: "medium", price: 18,quantity: 10, date : ISODate( "2021-01-13T05:10:13Z" ) }
] )

上面插入的数据,用Robo3T的表格形式显示一下如下:

 

现在有了数据后,我们开始正式学习聚合操作相关的指令

 运行聚合操作,使用的命令为

 db.collection.aggregate() 

下面开始学习聚合相关的指令

  • $match
    $match相当于sql中的where条件,来看例子:
    例子:将表中,size字段为medium的记录查询出来
    db.orders.aggregate( [{$match: { size: "medium" }}
    ] )
            

  • $group 
    $group就是分组的意思,看例子
    例子:查找size为medium,并且对其进行分组显示
    db.orders.aggregate( [// Stage 1: Filter pizza order documents by pizza size{$match: { size: "medium" }},// Stage 2: Group remaining documents by pizza name and calculate total quantity{$group: { _id: "$name", totalQuantity: { $sum: "$quantity" } }}
    ] )

     在这个例子中我们就会看到聚合操作中所谓的pipeline的用法,例子中我们用了$match和$group两个指令,他们的执行是分为2个阶段(stage),第一个阶段通过$match来进行数据的过滤,将满足的数据作为$group指令的输入,$group指令将$match的结果进行分组。后面的例子中全都是这种pipeline方式的聚合操作。

  • $project
    $project用来指定只输出哪些字段,看例子
    例子:查询name字段为Pepperoni的记录,并且只显示_id和name两个字段

    db.orders.aggregate( [{ $match: { name: "Pepperoni"} },{ $project: { _id: 1, name: 1} }] )


    通过$project我们指定结果中只显示_id和name字段,注意的是,在$match这个阶段输出的结果中包含了所有的字段,而只有在$project这个阶段,才将所以字段中的_id和name两个字段拿出来显示。

  • $sort
    $sort就是就它上面阶段输出的内容进行排序的作用,看例子
    例子:查询name字段为Pepperoni的记录按照_id进行排序,并且只显示_id和name两个字段.

    db.orders.aggregate( [// Stage 1: Filter pizza order documents by date range{ $match: { name: "Pepperoni"} },{ $project: { _id: 1, name: 1}},{$sort:{_id:-1} // -1:倒序 | 1:正序}] )

关于更多的aggregate Pipeline的的指令这里就全部列出来了,大家可以到官网中查询剩余的其他指令,下面讲一下关于使用aggregate pipeline的一些限制

  1. 在使用aggregate命令执行聚合操作是,对于发挥结果是由限制的,也就是你返回的json内容大小不能超过16 megabyte(16MB)
  2. 上面介绍的这些例如$project,$sort这些用在pipeline中的指令不能超过1000个(每个指令被称为一个阶段stage)阶段
  3. 当查询结果大于16MB时,会默认使用磁盘来存储结果,可以通过 { allowDiskUse: false }来禁用这个写入磁盘的操作。

Aggregation Pipeline and Sharded Collections

 就是当我们的mongdb是在分片模式下,如何使用聚合操作

 

相关文章:

[Mongodb 5.0]聚合操作

本文对应Aggregation Operations — MongoDB Manual 正文 此章节主要介绍了Aggregation Pipeline,其实就是将若干个聚合操作放在管道中进行执行,每一个聚合操作的结果作为下一个聚合操作的输入,每个聚合指令被称为一个stage。 在正式开始学…...

Shell 变量

Shell 变量 定义变量时,变量名不加美元符号($,PHP语言中变量需要),如: your_name"runoob.com" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样…...

SRM订单管理:优化供应商关系

一、概述SRM订单管理的概念: SRM订单管理是指在供应商关系管理过程中,有效管理和控制订单的创建、处理和交付。它涉及与供应商之间的沟通、合作和协调,旨在实现订单的准确性、可靠性和及时性。 二、SRM订单管理的流程: 1. 订单创…...

Unity 实现2D地面挖洞!涂抹地形(碰撞部分,方法二)

文章目录 前言一、初始化虚拟点1.1点结构:1.2每个点有的状态:1.3生成点结构: 二、实例化边缘碰撞盒2.1计算生成边缘碰撞盒 三、涂抹部分3.1.虚拟点3.2.鼠标点3.3.内圈3.4.外圈 四、关于优化结语: 前言 老规矩先上效果图 继上一篇涂抹地形文章讲解发出后,有不少网友…...

简化Gerber数据传输过程丨GC PowerPlace简介

离线编程,保持高效 GC PowerPlace提供了客户驱动的增强功能和新功能,以简化Gerber数据传输过程。GC PowerPlace是汇编编程的焦点,它接受几乎任何来源的数据,并为大多数PCB制造应用程序生成程序和文件。 功能特征 01、主要特点 …...

rust关于项目结构包,Crate和mod和目录的组织

rust 最近开始学习rust语言。感觉这门语言相对java确实是难上很多。开几个文章把遇到的问题记录一下 rust关于包,Crate 关于包,Crate这块先看看官方书籍怎么说的 crate 是 Rust 在编译时最小的代码单位。如果你用 rustc 而不是 cargo 来编译一个文件…...

如何微调优化你的ChatGPT提示来提高对话质量

ChatGPT会话质量很大程度上取决于微调优化提示的艺术。本文旨在阐明微调提示的复杂性,以确保你可以充分发挥ChaGPT这一颠覆性工具的潜力。 与ChatGPT对话的关键部分是“提示”。即:你输入的问题或陈述,它决定了人工智能的响应。类似于引导对…...

微信小程序实现下拉刷新

一、设置微信小程序所有页面都可以下拉刷新 1、在app.json的"window"中进行配置 (1)把"backgroundTextStyle":“light"改为"backgroundTextStyle”:“dark” (2)添加"enablePullDownRefresh…...

一、编程规约

一、编程规约 (一)命名风格 不以下划线(_)或美元符号($)开始和结束不用中文拼音避免歧视或侮辱性词语类名用UpperCamelCase风格,以下情况例外:DO/PO/DTO等方法名、参数名、成员变量、局部变量使用lowerCam…...

pytest数据驱动 pandas

pytest数据驱动 pandas 主要过程:用pandas读取excel里面的数据,然后进行百度查询,并断言 pf pd.read_excel(data_py.xlsx, usecols[1,2])print(pf.values)输出:[[‘听妈妈的话’ ‘周杰伦’] [‘遇见’ ‘孙燕姿’] [‘伤心太平…...

Modbus工业RFID设备在自动化生产线中的应用

传统半自动化生产线在运作的过程,因为技工的熟练程度,专业素养的不同,在制造过程中过多的人为干预,工厂将很难对每条生产线的产能进行标准化管理和优化。如果半自动化生产线系统是通过前道工序的作业结果和检测结果来决定产品在下…...

见证马斯克的钞能力,AI.com再次易主,OpenAI投掷1100万美金购买AI.com刚满五个月

我们又一次见证了马斯克的钞能力。上次是去年他用440亿美元买下推特。 高价值的AI.com域名在2021年易主后,闲置过一段时间,今年2月份突然重定向到ChatGPT。 对于ChatGPT用户来说,每次访问都要在浏览器里敲这些字符:https://chat.o…...

linux vi/vim

目录 什么是 vim?vi/vim的使用命令模式输入模式底线命令模式工作模式总结 vi/vim按键说明一般模式可用的光标移动、复制粘贴、搜索替换等移动光标搜索替换删除、复制与粘贴 指令行模式可用的按钮储存、离开等指令vim 环境的变更 所有的 Unix Like 系统都会内建 vi 文…...

算法与数据结构-哈希算法

文章目录 什么是哈希算法哈希算法的应用安全加密唯一标识数据校验散列函数负载均衡数据分片分布式存储 一致性哈希算法 什么是哈希算法 哈希算法的定义和原理非常简单,基本上一句话就可以概括了。将任意长度的二进制值串映射为固定长度的二进制值串,这个…...

企业做直播时如何选择适合自己的直播平台?

企业做直播时如何选择适合自己的直播平台? 可以通过对比不同直播平台的技术能力、服务质量、安全性等方面的内容,选择最适合自己的直播平台。 企业做直播如何选择直播平台 我的文章推荐: [视频图文] 线上研讨会是什么,企业对内对…...

【JavaWeb】实训的长篇笔记(下)

文章目录 八、功能实现1、注册功能2、登录功能3、问题说明4、首页数据显示5、后台管理 八、功能实现 1、注册功能 jsp:能够在页面中把数据动态化,jsp和html在元素标签上是无区别的,区别是html中写上java代码就成了jsp文件。filename.jsp。 需…...

linux bash快捷键

1、^abc-^-123: 这个命令用于运行上一个命令,并将其中的"abc"替换为"123"。 示例:如果上一个命令是echo abc,则运行^abc-^-123后会执行命令echo 123。 2、!!: 这个命令用于重复执行上一条命令。 示例:如果上…...

KCC@广州开源读书会广州开源建设讨论会

亲爱的开源读书会朋友们, 在下个周末我们将举办一场令人激动的线下读书会,探讨两本引人入胜的新书《只是为了好玩》和《开源之迷》。作为一个致力于推广开源精神和技术创新的社区,这次我们还邀请了圈内大咖前来参与,会给大家提供一…...

搜文本搜位置搜图片,1小时玩转阿里云 Elasticsearch

作者:朱杰、奚悦、黄宇 AI 和搜索的整合已成为下一代搜索引擎的发展趋势,技术革新的浪潮下,你是否想抓住搜索领域的新机会,增强 AI 产品力与技术竞争力? 想学习搜索引擎技术的你,是否面临这样的困惑&…...

从三个主要需求市场分析,VR全景创业的潜力发展

VR全景,5G时代朝阳产业,其实拍摄制作很简单,就是利用一套专业的相机设备去给商家拍摄,结合后期专业的3DVR全景展示拍摄制作平台,打造3D立体环绕的效果,将线下商家真实环境1:1还原到线上&#xf…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...

21-Oracle 23 ai-Automatic SQL Plan Management(SPM)

小伙伴们,有没有迁移数据库完毕后或是突然某一天在同一个实例上同样的SQL, 性能不一样了、业务反馈卡顿、业务超时等各种匪夷所思的现状。 于是SPM定位开始,OCM考试中SPM必考。 其他的AWR、ASH、SQLHC、SQLT、SQL profile等换作下一个话题…...