MongoDB 聚合管道
参考: 聚合管道 - MongoDB 手册 v7.0
介绍
聚合管道由一个或多个处理文档的阶段组成:
-
每个阶段对输入文档执行一个操作。例如,某个阶段可以过滤文档、对文档进行分组并计算值。
-
从一个阶段输出的文档将传递到下一阶段。
-
一个聚合管道可以返回针对文档组的结果。例如,返回总值、平均值、最大值和最小值。
如使用通过聚合管道更新中显示的阶段,则可以通过聚合管道更新文档。
其实也就类似于 MYSQL 的函数的功能
具体功能实现
先导入一部分数据
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" ) }
] )
计算总订单数量
以下聚合管道示例包含两个阶段,并返回按披萨名称分组后,各款中号披萨的总订单数量:
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" } }}] )
$match 阶段:
- 从披萨订单文档过滤出size为medium的披萨。
- 将剩余文档传递到$group阶段。
$group 阶段:
- 按披萨name对剩余文档进行分组。
- 使用$sum计算每种披萨name的总订单quantity。总数存储在聚合管道返回的totalQuantity字段中。
示例输出:
[{ _id: 'Cheese', totalQuantity: 50 },{ _id: 'Vegan', totalQuantity: 10 },{ _id: 'Pepperoni', totalQuantity: 20 }
]
计算订单总值和平均订单数
以下示例计算了两个日期之间的披萨订单总额和平均订单数量:
db.orders.aggregate( [// Stage 1: Filter pizza order documents by date range{$match:{"date": { $gte: new ISODate( "2020-01-30" ), $lt: new ISODate( "2022-01-30" ) }}},// Stage 2: Group remaining documents by date and calculate results{$group:{_id: { $dateToString: { format: "%Y-%m-%d", date: "$date" } },totalOrderValue: { $sum: { $multiply: [ "$price", "$quantity" ] } },averageOrderQuantity: { $avg: "$quantity" }}},// Stage 3: Sort documents by totalOrderValue in descending order{$sort: { totalOrderValue: -1 }}] )
$match 阶段:
- 使用 $gte 和 $lt 将披萨订单文档筛选为指定日期范围内的文档。
- 将剩余文档传递到$group阶段。
$group 阶段:
-
使用 $dateToString 按日期对文档进行分组。
-
对于每个群组,计算:
-
使用 $sum 和 $multiply 的总订单值。
-
使用 $avg 计算平均订单数量。
-
-
将分组的文档传递到 $sort 阶段。
$sort 阶段:
- 按每组的总订单值以降序对文档进行排序 ( -1 )。
- 返回排序文档。
示例输出:
[{ _id: '2022-01-12', totalOrderValue: 790, averageOrderQuantity: 30 },{ _id: '2021-03-13', totalOrderValue: 770, averageOrderQuantity: 15 },{ _id: '2021-03-17', totalOrderValue: 630, averageOrderQuantity: 30 },{ _id: '2021-01-13', totalOrderValue: 350, averageOrderQuantity: 10 }
]相关文章:
MongoDB 聚合管道
参考: 聚合管道 - MongoDB 手册 v7.0 介绍 聚合管道由一个或多个处理文档的阶段组成: 每个阶段对输入文档执行一个操作。例如,某个阶段可以过滤文档、对文档进行分组并计算值。 从一个阶段输出的文档将传递到下一阶段。 一个聚合管道可以返回针对文档…...
python-patterns:Python 设计模式大全
python-patterns 是一个开源的 Python 项目,它提供了各种经典的设计模式的 Python 实现。设计模式是一种针对常见软件设计问题的可复用解决方案,通过使用设计模式,开发者可以编写出结构更加合理、易于维护和扩展的代码。 Python 是一门动态语…...
Nginx编译所需基本库pcre、zlib、openssl
一、基本库介绍 pcre:(Perl Compatible Regular Expressions) 是一个用 C 语言编写的正则表达式库,用于进行文本匹配和搜索。它提供了与 Perl 正则表达式兼容的功能,并且广泛用于许多不同的软件项目中,如网…...
C#进阶:探索嵌套类、匿名类及对象初始化器的强大运用
在C#中,嵌套类、匿名类以及对象初始化器是几种强大的特性,它们可以极大地提高代码的可读性和灵活性。下面分别介绍这些特性的运用。 1. 嵌套类 嵌套类是指定义在另一个类内部的类。内部类可以访问其外围类的所有成员(包括私有成员ÿ…...
匈牙利算法模板
P3386 【模板】二分图最大匹配 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路:最模板的一集.还未匹配则匹配,否则之前一个给现在这个让位置. int n,m,e; vector<int> vct[505]; int match[505]; bool vis[505]; bool mark[505][505]; bool dfs(int s)…...
ubuntu 安装harbor
#安装包 wget https://github.com/goharbor/harbor/releases/download/v2.10.3/harbor-offline-installer-v2.10.3.tgz wget https://github.com/goharbor/harbor/releases/download/v2.10.3/harbor-offline-installer-v2.10.3.tgz.asc#导入签名公钥 gpg --keyserver hkps://ke…...
Python/大数据/机器识别毕业设计选题题目推荐
基于Python和Diango在线购物商城系统报告文档指导搭建视频 基于深度学习的人脸识别与管理系统,Python实现 基于Python/机器学习链家网新房数据可视化及预测系统 Python豆瓣电影情感分析推荐系统爬虫可视化,过滤算法 基于python的django框架生鲜商城管…...
基于Python的人工智能应用案例系列(17):LSTM正弦波预测
概述 本案例展示了如何使用LSTM(长短期记忆网络)来预测正弦波序列的未来值。由于正弦波具有周期性,传统的神经网络难以准确预测其上升或下降趋势,而LSTM则能够通过学习值的模式来进行更精准的预测。本案例将训练LSTM模型并预测正弦…...
Python空间地表联动贝叶斯地震风险计算模型
🎯要点 使用贝叶斯推断模型兼顾路径和场地效应,量化传统地理统计曲线拟合技术。使用破裂和场地特征等地质信息以及事件间残差和事件内残差描述数学模型模型使用欧几里得距离度量、角距离度量和土壤差异性度量确定贝叶斯先验分布和后验分布参数ÿ…...
虚幻引擎-设置UI自适应屏幕大小
在游戏中,如果想实现不同分辨率下,都可以支持当前的UI界面布局,都需要用到锚点功能。 虚幻引擎中的UI锚点(Anchor)是指控件在屏幕或父物体上的固定点,用于确定控件的位置和布局。 锚点的作用是确保UI元…...
C++继承的三种方式[ACCESS]
C继承的定义 两个类的继承关系在派生类中声明,派生类定义使用以下语法: class DerivedClass: [ACCESS] BaseClass{ /…/ }; 冒号(:)后的[ACCESS]是继承的最高权限级别符,可以是以下三个值(存取权限级别&am…...
idea 同一个项目不同模块如何设置不同的jdk版本
在IntelliJ IDEA中,可以为同一个项目中的不同模块设置不同的JDK版本。这样做可以让你在同一个项目中同时使用多个Java版本,这对于需要兼容多个Java版本的开发非常有用。以下是设置步骤: 打开项目设置: 在IDEA中,打开你…...
1-仙灵之谜(区块链游戏详情介绍)
1-仙灵之谜(区块链游戏详情介绍) 前言(该游戏仅供娱乐)正文 前言(该游戏仅供娱乐) 依稀记得本科那会儿参加了一个区块链实验室,那时每周末大家都会爬山或者抽出一下午讨论区块链以及未来&#x…...
基于51单片机的温湿度上下限监测预警proteus仿真
地址:https://pan.baidu.com/s/1hSprWBYhKKx8Txzaj33YPA?pwdjp3d 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMic…...
考核总结.
事件循环 单线程的js在处理异步事件时进行的一种循环过程。 在 JS中任务分为同步与异步任务,其中异步任务又分为两种:宏任务和 微任务。宏任务和微任务的执行顺序:总方针是先同步再异步,异步中先微任务,在宏任务。一次…...
后端学习路线
后端学习路线 一、编程语言 至少需要学习一门编程语言,建议学习JAVA和GO语言。 二、数据库 数据库分为关系型数据库和非关系型数据库,区别在于分关系型数据库常用于大数据,而非关系型数据库一般不在大数据方面使用。 关系型数据库&#x…...
车辆重识别(注意力 U-Net:学习在哪些区域寻找胰腺)论文阅读2024/10/01
什么是注意力机制? 什么是加性注意力? 大致说一下流程: 对于一张特征图来说,对于这张图中的每一个像素向量(例如a),计算该向量与所有像素向量的相似度,对这些相似度进行激活函数…...
【区别】git restore --staged <文件> 和 git reset HEAD <文件> 都可以用于取消已暂存的文件
git restore --staged <文件> 和 git reset HEAD <文件> 都可以用于取消已暂存的文件,但它们的工作原理和适用场景有所不同。以下是对这两个命令的详细比较: 1. 命令概述 git restore --staged <文件>: 专门用于将指定文件…...
void类型
编程语言中的void类型是一种特殊的数据类型,它表示不存在任何值。void, 无或者空类型。大部分编程语言支持void, 用做函数无返回值类型。最早ALGOL 68引入void类型。 void的特别使用 经典C缺乏void类型,函数可以不指定返回值,默认是整型int.…...
10/1 力扣 49.字母异位词分组
基本知识: 关于字符串的排序: 1.多个字符串排序 1.1使用python内置的sorted() 使用该函数后原对象并不发生变化 1.2若多个字符串使用列表进行存储,使用列表的sort()方法 使用该函数后原对象原地变化 2.对单个字符串里的字母进行排序 使…...
NCMDump解密工具:3步解锁网易云音乐加密文件,实现跨平台自由播放
NCMDump解密工具:3步解锁网易云音乐加密文件,实现跨平台自由播放 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?NCMDump是一款专…...
告别Mac!在Windows电脑上用HBuilder X和Appuploader搞定iOS测试包(附7天免费证书申请)
在Windows平台实现iOS应用打包测试的全流程指南 对于Windows平台的开发者而言,iOS应用打包测试一直是个令人头疼的问题。传统方式需要依赖Mac电脑和复杂的Xcode工具链,不仅成本高昂,学习曲线也陡峭。但如今,借助HBuilder X和Appup…...
从VCHA移除到成功升级:VMware VCSA6.5到6.7的完整实战记录
从VCHA移除到成功升级:VMware VCSA6.5到6.7的完整实战记录 在虚拟化运维领域,VMware vCenter Server Appliance(VCSA)的升级一直是技术团队面临的常规挑战。当环境配置了vCenter High Availability(VCHA)时…...
实战指南:如何用FAISS和GPT-4o-mini构建高效RAG系统(附开源代码)
实战指南:如何用FAISS和GPT-4o-mini构建高效RAG系统(附开源代码) 在人工智能领域,检索增强生成(RAG)技术正迅速成为连接大型语言模型与专业知识的桥梁。不同于传统LLM仅依赖预训练知识,RAG系统通…...
MCP 测试文章 1774508531523
这是一篇来自 MCP Server 的测试文章 测试正常工作!...
别再为付费教程头疼了!手把手教你用两块ESP32实现经典蓝牙通信(附完整代码)
零成本玩转ESP32蓝牙通信:从踩坑到实战的完整指南 在创客圈里流传着一句话:"每个物联网项目都是从点亮第一颗LED开始的。"而当我们想用两块ESP32开发板通过蓝牙控制这颗LED时,却常常陷入付费教程、失效代码和模糊文档的泥潭。本文将…...
Qwen3-0.6B-FP8在.NET生态中的集成应用:开发C#客户端调用库
Qwen3-0.6B-FP8在.NET生态中的集成应用:开发C#客户端调用库 最近在捣鼓一些AI模型,发现Qwen3-0.6B-FP8这个轻量级模型挺有意思的,推理速度快,资源占用少,特别适合在本地或者边缘设备上跑。不过,作为一个.N…...
2026年高性价比个人网盘盘点:告别“空间焦虑”,谁才是真正的效率神器?
在预算有限的情况下寻找个人网盘,大多数人的第一反应是打开计算器,算出“每 GB 只要几分钱”。但作为一个在存储行业摸爬滚打多年的老兵,我要告诉你一个反直觉的事实:对于 90% 的办公族和学生来说,网盘的“空间大小”是…...
【笔试真题】- 阿里系列-2026.03.25-算法岗
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围在线刷题 bishipass.com 阿里系列-2026.03.25-算法岗 1. LYA 的同余构造 问题描述 说明:阿里系列近期多条业务线笔试题基本共用同一套公开机试,淘天、阿里云等方向都可参考本场。 …...
C语言:结构体(自定义类型)
目录 1. 声明 1.1 结构体的声明 1.2 结构体自引用 2. 结构体内存对齐(热门考点) 2.1 对齐规则 2.3 修改默认对齐数 3.结构体传参 4. 结构体实现位段 4.1 位段 4.2 内存分配 4.3 跨平台问题 4.4 位段的应用:IP数据报 4.5 注意事项…...
