系列十三、MongoDB聚合查询

news2024/11/17 13:36:40

一、概述

MongoDB聚合框架(Aggregation Framework)是一个计算框架,它可以:

①:作用在一个或者几个集合上;

②:对集合中的数据进行一系列的运算;

③:将这些数据转化为期望的形式;

从效果而言,聚合框架相当于SQL中的 group by、left outer join、as等

二、聚合

2.1、管道(Pipeline)和步骤(Stage)

整个聚合运算过程称为管道(Pipeline),它是由多个步骤(Stage)组成的,每个管道:

①:接受一系列文档(原始数据);

②:每个步骤对这些文档进行一系列运算;

③:结果文档输出给下一个步骤;

2.2、基本格式

pipline = [$stage1,$stage2,...$stageN]

db.<COLLECTION>.aggregate(
    pipline,
    { options }
);

2.3、常见步骤

 2.3.1、常见步骤中的运算符

 2.4、少见步骤

2.5、使用场景

聚合查询可以用于OLAP和OLTP场景,例如:

 2.6、MQL常用步骤与SQL对比

2.6.1、vs1

 2.6.2、vs2

 2.6.3、特有步骤$unwind

 2.6.4、特有步骤$bucket

 2.6.5、特有步骤$facet

三、实验一

3.1、初始化数据

db.orders.insert(
	[
		{
			"street": "西兴街道",
			"city": "杭州",
			"state": "浙江省",
			"country": "中国",
			"zip": "24344-1715",
			"phone": "18866668888",
			"name": "李白",
			"userId": "3573",
			"orderDate": "2019-01-02 03:20:08.805",
			"status": "completed",
			"shippingFee": 8.00,
			"orderLines": [{
					"product": "iPhone5",
					"sku": "2001",
					"qty": 1,
					"price": 100.00,
					"cost": 100.00
				},
				{
					"product": "iPhone5s",
					"sku": "2002",
					"qty": 2,
					"price": 200.00,
					"cost": 400.00
				},
				{
					"product": "iPhone6",
					"sku": "2003",
					"qty": 1,
					"price": 300.00,
					"cost": 300.00
				},
				{
					"product": "iPhone6s",
					"sku": "2004",
					"qty": 2,
					"price": 400.00,
					"cost": 800.00
				},
				{
					"product": "iPhone8",
					"sku": "2005",
					"qty": 2,
					"price": 500.00,
					"cost": 1000.00
				}
			],
			"total": 2600
		},
		{
			"street": "长河街道",
			"city": "杭州",
			"state": "浙江省",
			"country": "中国",
			"zip": "24344-1716",
			"phone": "18866668881",
			"name": "杜甫",
			"userId": "3574",
			"orderDate": "2019-02-02 13:20:08.805",
			"status": "completed",
			"shippingFee": 5.00,
			"orderLines": [{
					"product": "iPhone5",
					"sku": "2001",
					"qty": 1,
					"price": 100.00,
					"cost": 100.00
				},
				{
					"product": "iPhone5s",
					"sku": "2002",
					"qty": 2,
					"price": 200.00,
					"cost": 400.00
				},
				{
					"product": "iPhone6",
					"sku": "2003",
					"qty": 1,
					"price": 300.00,
					"cost": 300.00
				},
				{
					"product": "iPhone6s",
					"sku": "2004",
					"qty": 2,
					"price": 400.00,
					"cost": 800.00
				},
				{
					"product": "iPhone8",
					"sku": "2005",
					"qty": 2,
					"price": 500.00,
					"cost": 1000.00
				}
			],
			"total": 2600
		},
		{
			"street": "浦沿街道",
			"city": "杭州",
			"state": "浙江省",
			"country": "中国",
			"zip": "24344-1717",
			"phone": "18866668882",
			"name": "王安石",
			"userId": "3575",
			"orderDate": "2019-03-02 14:20:08.805",
			"status": "completed",
			"shippingFee": 20.00,
			"orderLines": [{
					"product": "iPhone5",
					"sku": "2001",
					"qty": 1,
					"price": 100.00,
					"cost": 100.00
				},
				{
					"product": "iPhone5s",
					"sku": "2002",
					"qty": 2,
					"price": 200.00,
					"cost": 400.00
				},
				{
					"product": "iPhone6",
					"sku": "2003",
					"qty": 1,
					"price": 300.00,
					"cost": 300.00
				},
				{
					"product": "iPhone6s",
					"sku": "2004",
					"qty": 2,
					"price": 400.00,
					"cost": 800.00
				},
				{
					"product": "iPhone12 ProMax",
					"sku": "2006",
					"qty": 1,
					"price": 1500.00,
					"cost": 1500.00
				}
			],
			"total": 3100
		},
		{
			"street": "长庆街道",
			"city": "杭州",
			"state": "浙江省",
			"country": "中国",
			"zip": "24344-1717",
			"phone": "18866668883",
			"name": "苏东坡",
			"userId": "3576",
			"orderDate": "2019-04-02 15:20:08.805",
			"status": "completed",
			"shippingFee": 10.00,
			"orderLines": [
				{
					"product": "iPhone6s",
					"sku": "2004",
					"qty": 2,
					"price": 400.00,
					"cost": 800.00
				},
				{
					"product": "iPhone12 ProMax",
					"sku": "2006",
					"qty": 1,
					"price": 1500.00,
					"cost": 1500.00
				}
			],
			"total": 2300
		}
	]
)

 3.2、案例一:计算到目前为止的所有订单的总销售额

db.orders.aggregate(
	[
		{
			$group:{
				_id: null,
				total: {$sum:"$total"}
			}
		}
	]
)

 

 3.3、案例二:查询2019年第一季度(1月1日-3月31日)已完成订单(completed)的订单总金额和订单总数

db.orders.aggregate(
	[
	  {
		'$match': {
		  'status': 'completed', 
		  'orderDate': {
			'$gte': '2019-01-01', 
			'$lt': '2019-04-01'
		  }
		}
	  }, {
		'$group': {
		  '_id': null, 
		  'total': {
			'$sum': '$total'
		  }, 
		  'shippingFee': {
			'$sum': '$shippingFee'
		  }, 
		  'count': {
			'$sum': 1
		  }
		}
	  }, {
		'$project': {
		  'grandTotal': {
			'$add': [
			  '$total', '$shippingFee'
			]
		  }, 
		  '_id': 0
		}
	  }
	]
)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/655000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIGC技术研究与应用 ---- 下一代人工智能:新范式!新生产力!(5 - AIGC 未来展望)

文章大纲 不可避免的职业替代AI 对人类思维的影响AIGC 的风险人工智能对齐 -- 价值学习 鲁棒适应参考文献与学习路径GPT 系列模型解析前序文章模型进化券商研报陆奇演讲多模态据预测,未来五年10%-30%的图片内容由AI参与生成,考虑到下一代互联网对内容需求的迅速提升,2030年A…

计算机网络管理 实验4(一) SNMP报文分析之验证SNMP协议的工作过程以及分析SNMP数据单元的格式

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

FPGA基础知识-门级建模

目录 学习目标 学习内容 1.门的类型 2.门延迟 学习时间 学习小结 学习目标 学习Verilog 提供的门级原语 理解门的实例引用、门的符号以及andor&#xff0c;bufnot类型的门的真值表 学习如何根据电路的逻辑图来生成verilog描述 讲述门级设计中的上升、下降和关断延迟 …

【论文解读系列】Blip-2:引导语言图像预训练具有冻结图像编码器和大型语言模型

Blip-2 BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models BLIP-2&#xff1a;引导语言图像预训练具有冻结图像编码器和大型语言模型 (0) 总结&实测 总结&#xff1a;blip-2 最大的贡献在于&#xff0c;提出了…

跨境电商社交媒体:选择合适的平台

正如您在使用社交媒体的九种方法中了解到的那样&#xff0c;跨境电商优先考虑社交媒体营销可能会更有利可图。有数十个平台可供选择&#xff0c;每个平台都迎合了具有不同兴趣、特征和位置的独特受众。 那么您应该关注哪个社交媒体平台以及如何以最大效率工作&#xff1f; 目…

【Vue全家桶高仿小米商城】——(三)VueCli4.0安装和使用

文章目录 第三章&#xff1a;VueCli4.0安装和使用一、VueCli4.0安装&#xff1a;二、创建Vue项目方式一 使用脚本搭建方式二 使用UI界面搭建 三、安装依赖方式一 Vue脚手架图形界面安装方式二、命令行安装 四、Vue DevTools安装使用两种安装方式&#xff1a; 第三章&#xff1a…

Linux权限解析

一、Linux用户分类 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制 普通用户&#xff1a;在linux下做有限的事情。 超级用户的命令提示符是“#”&#xff0c;普通用户的…

6.6面向对象继承

2. 面向对象特征二&#xff1a;继承(Inheritance) 2.1 继承的概述 说到继承我们会想到什么 在Java面向对象程序设计中的继承&#xff0c;多个类中存在相同属性和行为时&#xff0c;将这些相同的内容抽取到单独一个类&#xff08;父类&#xff09;中&#xff0c;然后所有的类继…

【备战秋招】每日一题:4月15日美团春招第二题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第二题-分糖果 在线评测链接:P1236 题目内容 某天&#xff0c;塔子哥去商店买了两种不同口味的糖果&#xff0c;分别买了 a 个和 b 个。当他回到家时&#xff0c;他发现他…

IDE/以glog为例实践CMake-Gui工具使用

文章目录 概述构建glog编译glog.sln解决方案glog的配置项BUILD_SHARED_LIBSBUILD_TESTINGCMAKE_CONFIGURATION_TYPESCMAKE_INSTALL_PREFIXWITH_GTESTGTest_DIRWITH_GFLAGSgflag_DIRPRINT_UNSYMBOLIZED_STACK_TRACESWITH_SYMBOLIZEWITH_FUZZINGWITH_THREADSWITH_TLSWITH_GMOCKWI…

3分钟了解如何做好项目管理和协作

目录 介绍 什么是项目管理 项目管理三要素 时间 成本 质量 项目启动阶段项目启动负责人要了解四个问题 项目规划阶段 任务分解->任务优先级安排->计划呈现->风险控制 快速呈现项目工作计划 项目启动&#xff1a;信息同步任务分工高效 项目跟踪&#xff1a…

实战:用docker-compose容器化springboot项目

文章目录 前言技术积累docker-compose定义docker-compose文件参数docker-compose命令 实战演示1、创建挂载路径2、编写docker-compose.yml3、启动并管理容器 写在最后 前言 前面我们学习和实战了用dockerfile构建镜像&#xff0c;通过镜像可以任意在docker环境容器化部署项目。…

C++静态联编和动态联编

目录 2.1静态联编 2.2动态联编 2.3虚函数面试题 2.3.1构造函数中使用memset函数 2.3.2this指针与虚函数的调用 2.3.3构造析构函数中调用虚函数 2.3.4动态和静态联编与访问属性和默认值 2.3.5动态创建对象时的析构函数 联编是指计算机程序彼此关联的过程&#xff0c;是把…

Fiddler汉化成功

我安装的fiddler 操作系统是&#xff1a;Win10 64Bit 操作系统的版本号是&#xff1a;v5.0.20194.41348 for .NET 4.6.1 fiddler下载地址&#xff1a; 我用夸克网盘分享了「02-Web调试工具-FiddlerSetup.exe」&#xff0c;点击链接即可保存。 链接&#xff1a;https://pan.quar…

什么是项目里程碑?如何为项目成功设置?

高速公路上每隔一公里就有一个标志牌&#xff0c;这表明你需要进一步行驶才能到达目的地的距离。虽然没有这些标志你也可以到达目的地&#xff0c;但它们的存在使你放心&#xff0c;让你确信走在正确的道路上。 项目里程碑在项目管理中也有同样的作用。当你的项目实现目的时&a…

Linux内核学习----整体概览

目录 1、概述 2、核心抽象及设计选型 2.1. 对进程和内核的抽象 2.2. 对进程地址空间的抽象 2.3. 支持可重入可抢占的内核 2.4. 放松管控与努力回收 2.5. 单块结构内核动态加载模块 2.6. 为系统中的一切活动打拍子 2.7. 一切皆文件的理念 3、Linux整体架构模块说明 3.…

对C++中const的说明

对C中const的说明 在C中&#xff0c;const是一个关键字&#xff0c;用于指定对象或变量是只读的&#xff0c;即不可修改。它可以应用于不同的上下文中&#xff0c;包括&#xff1a; 对象和变量声明&#xff1a;通过在变量或对象的声明前加上const关键字&#xff0c;可以将其标…

ACL2022 Document-Level Event Argument Extraction via Optimal Transport

Document-Level Event Argument Extraction via Optimal Transport 论文&#xff1a;https://aclanthology.org/2022.findings-acl.130/ 代码&#xff1a;- 期刊/会议&#xff1a;ACL 2022 摘要 事件论元抽取&#xff08;EAE&#xff09;是事件抽取的子任务之一&#xff0c…

智驾传感器新风向!拐点将至

“大家都比较关注激光雷达&#xff0c;尤其是在今年整个行业聚焦降本的大背景下&#xff0c;这个赛道还行不行&#xff1f;”6月8日&#xff0c;2023年度&#xff08;第十四届&#xff09;高工智能汽车开发者大会上&#xff0c;高工智能汽车研究院首发《2023-2025年中国汽车市场…

【备战秋招】每日一题:4月29日美团春招第三题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第三题-酒王 在线评测链接:P1268 题目内容 塔子哥和他的朋友们共 n 人是一群热爱生活的年轻人&#xff0c;他们经常在一起吃饭&#xff0c;聊天&#xff0c;玩游戏。有一…