Mongo关联查询两张表中分别满足某些条件的记录

如果是在mysql里面,这个查起来就很方便,但是,在mongo里面的话,查询起来就没这么方便了。

如果使用付费版的Studio 3T工具的话,也可以像使用mysql一样查询mongo数据,但是免费版不支持sql的用法,只能用js语法的查询方式:

需求:

select *  from equity t1 left join equity_ext t2 on t1.quoteId =t2.quoteId and t1.regionId = 6 and t1.listedStatus=1 and t1.securityType=7and t2.isPTP != 0

转换为js语法查询:

在MongoDB中,要实现类似SQL中的LEFT JOIN操作,通常需要使用聚合框架中的$lookup操作符。这个操作符允许你在一个集合中查找匹配的文档,并将其结果添加到原始文档中。在MongoDB中,没有直接的LEFT JOIN语法,但是可以通过$lookup来实现类似的效果。

db.equity.aggregate([{$lookup: {from: "equity_ext", // 指定要连接的集合localField: "quoteId", // 指定当前集合中用于匹配的字段foreignField: "quoteId", // 指定要连接的集合中的字段as: "ext" // 指定连接结果的字段名}},{$unwind: "$ext" // 展开连接结果,使其成为单独的文档},{$match: {regionId: 6,listedStatus: 1,securityType: 7,"ext.isPTP": { $ne: 0 } // 非0值,即不等于0}}
]);
  1. $lookup阶段:执行左连接,将equity集合(别名为t1)和equity_ext集合(别名为t2)进行连接,基于quoteId字段。

  2. $unwind阶段:由于$lookup的结果是一个数组,$unwind用于将这个数组展开为多个文档,每个文档包含一个来自equity_ext集合的匹配项。

  3. $match阶段:过滤结果,只保留满足特定条件的文档,即regionId为6,listedStatus为1,securityType为7,并且equity_ext集合中的isPTP字段不等于0。

db.equity.aggregate([{$match: {regionId: 6,listedStatus: 1,securityType: 7}},{$lookup: {from: "equity_ext",localField: "quoteId",foreignField: "quoteId",as: "equity_ext_docs"}},{$unwind: {path: "$equity_ext_docs",preserveNullAndEmptyArrays: true}},{$match: {"equity_ext_docs.isPTP": { $ne: 0 }}},{$project: {_id: 1,quoteId: 1,regionId: 1,listedStatus: 1,securityType: 1,equity_ext_docs: {quoteId: 1,isPTP: 1}}}
]);

这个查询首先从equity集合中筛选出满足条件的文档(regionId为6,listedStatus为1,securityType为7),然后使用$lookup操作符与equity_ext集合进行左连接。接下来,使用$unwind操作符展开连接后的数组,并使用$match操作符筛选出isPTP不等于0的文档。最后,使用$project操作符选择需要的字段。

End

 
 
 
 
 
如果觉得文章对你有帮助的话,欢迎点赞转发~
如果还没有进粉丝交流群的小伙伴,赶快添加好友(xiaobotester)邀请你们进群喔。
 
👇👇👇

关注公众号,测试干货及时送达aa55114de4ae0bd4a5cf094da0287933.png

如果想查看博主的所有文章列表,可以在公众号的菜单那里进行点击查看:

777faed56b433379ee264d8e50538911.png

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

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

相关文章

Python---Pandas万字总结(1)

Pandas基础-1 Pandas 是 一个强大的分析结构化数据的工具集。Pandas 以 NumPy 为基础(实现数据存储和运算),提供了专门用于数据分析的类型、方法和函数,对数据分析和数据挖掘提供了很好的支持;同时 pandas 还可以跟数…

kubeadm 在vubuntu22.04.4 server 上安装kubernetes 1.28.9

一、基础安装(所有节点执行)---------------------------------------- 时间同步 关闭防火墙 sudo ufw disable sudo ufw status关闭交换内存 临时关闭 sudo swapoff -a free -m永久关闭 sudo vim /etc/fstab 注释掉交换内存 转发 IPv4 并让 iptab…

云贝教育 |【好课上新】ITSS服务工程师与服务经理认证培训

课程前言 ITSS是中国电子技术标准化研究院推出的,包含“IT 服务工程师”和“IT 服务经理”的系列培训。有效满足GB/T 28827.1 的符合性评估要求和ITSS服务资质升级要求。 IT 服务工程师”结合 IT服务从业人员能力规范和要求,从服务技术、服务技巧和服务…

【Linux】调试器-gdb使用

大家好,我是苏貝,本篇博客带大家了解Linux的编译器-gcc/g,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 1. 背景(A) 看大小(B) 查看ELF格式的文件 2.使用(A) 进入gdb(B) quit/q&#xff…

【码农日常】将mp4转换为逐帧图片

项目场景: 拍摄了一段视频记录设备工作的状态和测量仪器的实时数据。由于测量仪器岁数比较大,不够智能,遂打算将视频转换为逐帧图片进行分析。 网上没找到现成工具,借鉴网上大神的操作方式打算用python写一个工具。 问题描述 用…

一、VIsual Studio下的Qt环境配置(Visual Studio 2022 + Qt 5.12.10)

一、下载编译器Visual Studio2022和Qt 5.12.10 Visual Studio 2022 社区版就够学习使用了 Qt5.12.10 安装教程网上搜,一大堆 也很简单,配置直接选默认,路径留意一下即可 二、配置环境 Ⅰ,配置Qt环境变量 系统变量下的Path&a…

【DevOps】深入解析 Docker日志分析和服务故障排除技巧

在今天的云计算和微服务架构中,Docker凭借其轻量级和高效的容器化技术,已成为软件部署不可或缺的一部分。然而,随着应用复杂性的增加,有效的日志管理和故障排除能力成为了开发者和运维人员必须掌握的核心技能。本文将带你深入探索…

AI办公自动化-用kimi自动清理删除重复文件

在kimichat中输入提示词: 你是一个Python编程专家,要完成一个编写Python脚本的任务,具体步骤如下: 1、打开文件夹D:\downloads; 2、哈希值比较比较里面所有的文件,如果文件相同,那么移动多余…

群晖NAS本地搭建Bitwarden密码管理服务并实现远程同步密码托管

文章目录 1. 拉取Bitwarden镜像2. 运行Bitwarden镜像3. 本地访问4. 群晖安装Cpolar5. 配置公网地址6. 公网访问Bitwarden7. 固定公网地址8. 浏览器密码托管设置 Bitwarden是一个密码管理器应用程序,适用于在多个设备和浏览器之间同步密码。自建密码管理软件bitwarde…

华为配置智能无损网络综合

配置智能无损网络综合示例 适用产品和版本 安装了P系列单板的CE16800、CE6866、CE6866K、CE8851-32CQ8DQ-P、CE8851K系列交换机V300R020C00或更高版本。 安装了SAN系列单板的CE16800、CE6860-SAN、CE8850-SAN系列交换机V300R020C10或更高版本。 CE6860-HAM、CE8850-HAM系列交换…

初识FlaskMySQL实现前后端通信 全栈开发之路——后端篇(1)

全栈开发一条龙——前端篇 第一篇:框架确定、ide设置与项目创建 第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇:setup语法,设置响应式数据。 第四篇:数据绑定、计算属性和watch监视 第五篇 : 组件…

02-WPF_基础(二)

3、控件学习 控件学习 布局控件: panel、Grid 内容空间:Context 之恶能容纳一个控件或布局控件 代表提内容控件:内容控件可以设置标题 Header 父类:HeaderContextControl。 条目控件:可以显示一列数据&#xf…

如何解决3D模型变黑或贴图不显示的问题---模大狮模型网

在进行3D建模和视觉渲染时,经常会遇到模型表面变黑或贴图不显示的问题,这可能严重影响最终视觉效果的质量。这些问题通常与材质设置、光照配置或文件路径错误有关。本文将探讨几种常见原因及其解决方法,帮助3D艺术家和开发者更有效地处理这些…

Java | Leetcode Java题解之第88题合并两个有序数组

题目: 题解: class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 m - 1, p2 n - 1;int tail m n - 1;int cur;while (p1 > 0 || p2 > 0) {if (p1 -1) {cur nums2[p2--];} else if (p2 -1) {cur nums1[p…

Hive表数据优化

Hive表数据优化 1.文件格式 为Hive表中的数据选择一个合适的文件格式,对提高查询性能的提高是十分有益的。 (1)Text File 文本文件是Hive默认使用的文件格式,文本文件中的一行内容,就对应Hive表中的一行记录。 可…

VTK图形算法API:vtkSphereSource,球几何数据

大家好,我是先锋,专注于AI领域和编程技术分享,在这里定期分享计算机编程知识,AI应用知识,职场经验; 本系列介绍VTK图像算法API,后续会介绍VTK项目实践应用,关注我,不错过…

GPS与精致农业 无人机应用 农业遥感 农业类

全球定位系统是美国国防部主要为满足军事部门对海上、陆地和空中设施进行高精度导航和定位的要求而建立的。GPS系统最基本的特点是以“多星、高轨、高频、测量-测距”为体制,以高精度的原子钟为核心。GPS作为新一代卫星导航与定位系统,不仅具有全球性、全…

LeetCode 力扣题目:买卖股票的最佳时机 III

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

Django5.0入门基本使用

文章目录 一、安装1、安装django环境2、创建项目3、启动服务器4、创建第一个应用(1)创建应用(2)编写视图(3)映射url(4)测试 二、核心概念1、django.urls 函数(1&#xff…

U盘打不开提示格式化怎么办?(含数据恢复及U盘修复教程)

引言: 随着数字化时代的发展,U盘已成为我们日常生活和工作中不可或缺的数据存储工具。然而,有时我们可能会遇到U盘突然无法打开,并提示需要格式化的问题。这不仅会打乱我们的工作节奏,还可能会导致重要数据丢失。本文…