mongoDB聚合查询

news2024/11/14 8:55:37

管道

  1. 管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
  2. MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。
  3. 管道操作是可以重复的。

聚合管道操作

可参考菜鸟文档:菜鸟文档

命令 功能描述
$project指定输出文档里的字段.
$match选择要处理的文档,与fine()类似。
$limit限制传递给下一步的文档数量。
$skip跳过一定数量的文档。
$unwind扩展数组,为每个数组入口生成一个输出文档。(把列表拆开)
$group根据key来分组文档。
$sort排序文档。
$geoNear选择某个地理位置附近的的文档。
$out把管道的结果写入某个集合。
$redact控制特定数据的访问。
$lookup 多表关联(3.2版本新增)

$lookup

相当关系型数据库中多表关联查询

属性作用
from同一个数据库下等待被Join的集合。
localField源集合中的match值,如果输入的集合中,某文档没有 localField这个Key(Field),在处理的过程中,会默认为此文档含有 localField:null的键值对。
foreignField待Join的集合的match值,如果待Join的集合中,文档没有foreignField值,在处理的过程中,会默认为此文档含有 foreignField:null的键值对。
as为输出文档的新增值命名。如果输入的集合中已存在该值,则会覆盖掉
// 管道是一个切片,里面可以放很多操作
db.collection.aggregate([{ 
	$lookup: { 
		from: "外键表",
 		localField: "本表外键字段", 
 		foreignField: "外键表字段", 
 		as: "起别名" 
 	} 
})

实操

  1. 准备表1:
    在这里插入图片描述
  2. 准备表2:
    在这里插入图片描述
  3. 查询:
unc main() {
	VulnInfo:=GetCollection("SVD_DATA","VulnInfo")
	
	cur,err:=VulnInfo.Aggregate(context.Background(),[]bson.M{
		// 外键查询
		{"$lookup":bson.M{
			"from":"VulnTags",
			"localField":"tags",
			"foreignField":"id",
			"as":"vuln_tags",
		}},
		// 限制两个
		{
			"$limit":2,
		},
		// 不要_id
		{
			"$project":bson.M{
				"_id":false,
			},
		},
	},)
	if err!=nil{
		fmt.Println(err)
	}else{
		dic:=make(map[string]interface{})
		for cur.Next(context.TODO()){
			err:=cur.Decode(dic)
			if err!=nil{
				fmt.Println(err)
			}else{
				fmt.Println(dic)
			}
		}
	}
}

结果:
在这里插入图片描述

无论是某站视频还是某些机构的文档,都没有聚合和管道的讲解,导致我这个自学菜鸟一直都是find->for->find->append手动查询两次,再拼接返回值,坑爹呢这是!!!

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

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

相关文章

shell第四天作业——流程控制之循环

题目 一、for创建20个用户,用户前缀由用户输入,用户初始密码由用户输入。 二、for循环ping测试指定网段的主机,网段由用户输入。 三、使用for/while实现批量主机root密码的修改 一、for创建20个用户,用户前缀由用户输入&#x…

2022年已然要结束了,一起来分享下你的故事吧!2023年的接力棒已经递到手里,千言万语不如一句Fighting!

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《QT开发实战》 《嵌入式通用开发实战》 《从0到1学习嵌入式Linux开发》 《Android开发实战》 《实用硬件方案设计》 长期持续带来更多案例与技术文章分享…

c++语法欠缺地方

sizeof是用来计算变量占多大内存的,单位是字节(byte);sizeof 后面跟类型时,必须加上括号,例如sizeof(double);后面跟变量可以不用加括号,例如:sizeof d%d是以十进制形式输出有符号整…

CDP集群卸载过程

CDP集群卸载过程 1. 登录到Cloudera Manager,并停止整个集群服务。 2. 停用并移除所有Parcel 3. “停用”CDH7的Parcel。 4. 从主机删除”CDH6的Parcel 5. 删除集群 6. 登录server机器,停止CM Server服务 systemctl stop cloudera-scm-server 7. 移除…

如何实现高性能点赞(三)

数据库设计 数据库表中至少要包含三个字段:被点赞用户id,点赞用户id,点赞状态。再加上主键id,创建时间,修改时间就行了。 建表语句 对应的对象 UserLike 数据库操作 操作数据库同样封装在接口中 LikedService L…

【2.2】服务拆分--服务远程调用

服务拆分--服务远程调用1 案例--根据订单id查询订单功能2 远程调用方式分析2.1 注册RestTemplate2.2 发http请求3 总结1 案例–根据订单id查询订单功能 需求:根据订单id查询订单的同时,把订单所属的用户信息一起返回。 由上一节的测试结果可以看出&…

opencv-python常用函数解析及参数介绍(五)——腐蚀与膨胀

腐蚀与膨胀前言膨胀腐蚀开运算与闭运算礼帽与黑帽运用膨胀和腐蚀获得图像轮廓前言 有些时候图片上会有一些划痕或者污渍,会影响图片的质量,假设我有一张写有“艾醒”的图片,但是有花花绿绿的划痕和污渍,这时我们就可以运用腐蚀与…

五、Web自动化测试

Web自动化测试5.1 Selenium Web 自动化5.1.1 Selenium 和 Robot Framework SeleniumLibrary 库介绍安装 robotframework-seleniumlibrary导入 SeleniumLibrary5.1.2 Open Browser 和 Close Browser5.1.3 Input Text5.1.4 Click Button5.1.5 Click Element5.1.6 Click Link5.1.7…

2022CTF培训(十)IOT 相关 CVE 漏洞分析

附件下载链接 这里选择的设备是一款家用路由器,型号为 D-Link DIR-850L(EOL) 。由于该款路由器已停产,官网无法下载到固件,不过目前这个网站还能下载到相关的固件,当然附件中也会提供需要分析的固件。 固件解密 以 DIR850LB1_FW…

归一化 (Normalization)、标准化 (Standardization)和中心化/零均值化 (Zero-centered)

目录 一、概念 1、归一化(Normalization): 2、标准化(Standardization): 3、中心化/零均值化(zero-centered): 二、联系和差异: 三、标准化和归一化的多种…

Faster RCNN网络源码解读(Ⅵ) --- RPN网络代码解析(上)RPNHead类与AnchorsGenerator类解析

目录 一、代码作用(rpn_function.py) 二、代码解析 2.1 RPNHead类 2.2 AnchorsGenerator类 2.2.1 初始化函数__init__ 2.2.2 正向传播过程 forward 2.2.3 set_cell_anchors生成anchors模板 2.2.4 generate_anchors生成anchors 2.2.5 cached_g…

【Linux】vim 中批量添加注释

本期主题:vim 中批量添加注释博客主页:小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限,出现错误希望大家不吝赐 此文主要介绍两种方法:方法一 :块选择模式;方法二: 替换命令 &#x…

Java基础随手记

数组 数组的使用 数组可以存放多个同一类型的数据,数组也是一种数据类型,是引用类型。即:数组就是一组数据 问题引入 传统的解决方式 使用数组来解决 可以看到,我们创建了一个double类型元素的数组,将我们要计算…

buuctf-misc-[GKCTF 2021]你知道apng吗1

先下载附件,快要过年了,十二月份还没发过文章,紧急写一篇。 下载文件后缀名为apng 搜索一下APNG(基于PNG的位图动画格式)_百度百科 利用火狐浏览器可以打开 类似gif图片的格式,用专门工具进行拆解&#xf…

MySQL内部的核心组件

mysql前言 1.MySQL的驱动 2.数据库的连接池 3.MySQL的工作线程 4.SQL接口 5.SQL解析器 6.查询优化器 7.执行器组件 8.存储引擎接口 1.MySQL的驱动是做什么的? 尤其记得刚刚学习MySQL的时候,引入的pom坐标:mysql-connector-java,这…

软考- 计算机组成原理与体系结构

【考点梳理】 考点1、数据的表示(★★★★) 考点1.1、进制的转换 【考法分析】 本考点的基本考法是与内存地址计算、IP地址计算结合考查。 【要点分析】 1、十进制转R进制(短除法); 2、R进制转十进制&#xff0…

Arduino与Proteus仿真实例-WS2812实现音乐氛围灯仿真

WS2812实现音乐氛围灯仿真 本文将使用WS2812实现一个音乐氛围灯。Arduino通过检测音频信号强度,然后转换成W2812灯带驱动信号,从而实现音乐氛围灯。 WS2812的驱动和使用在前面的文章中作了详细的介绍,请参考: Arduino与Proteus仿真实例-WS2812-RGB-LED灯带酷炫效果仿真Ar…

【软件质量】软件质量分析总结报告

软件质量-----“软件与明确地和隐含地定义的需求相一致的程度” 一、质量的概念 Ⅰ、传统的质量概念:产品性能是否符合技术规范 Ⅱ、质量是一组固有特性满足要求的程度 Ⅲ、适用性质量 Ⅳ、质量不仅指产品质量,也指过程和体系的质量 二、软件质量 Ⅰ、产品质…

教你如何用一行Python代码实现GUI图形界面

文章目录一、选择文件夹二、选择文件三、选择日期四、输入文本五、弹窗无按钮六、弹窗无标题七、弹窗只有OK按钮八、弹窗只有Error按钮(红色)九、显示通知窗口十、弹窗选择十一、自定义弹窗实战一、选择文件夹 首先导入PySimpleGUI库,并且用缩写sg来表示。 import…

Kubernetes 笔记(02)— 基本架构、工作机制简述、Master 组件、Node 组件

1. Kubernetes 的基本架构 Kubernetes 采用了现今流行的“控制面 / 数据面”(Control Plane / Data Plane)架构,集群里的计算机被称为“节点”(Node),可以是实机也可以是虚机,少量的节点用作控制…