mongodb连表查询,postman使用

news2024/9/22 9:38:22

要实现与SQL类似的查询,你需要使用聚合框架(Aggregation Framework)

SELECT b.name, a.*
FROM user a
LEFT JOIN order b
ON a.id = b.id
WHERE b.name LIKE '%acd%';

从MongoDB 3.2版本开始,引入了聚合框架中的$lookup阶段,这使得实现类似于SQL中的JOIN查询成为可能。下面我将详细介绍如何使用$lookup来进行连表查询。

假设你有两个集合:usersordersusers集合包含用户信息,orders集合包含订单信息。每个订单都包含一个用户ID (userId),用于关联用户

users 集合
{
  "_id": ObjectId("5f46e7b0f7c3a82a7c78d4ee"),
  "name": "Alice",
  "email": "alice@example.com"
}
orders 集合
{
  "_id": ObjectId("5f46e7b0f7c3a82a7c78d4ef"),
  "userId": ObjectId("5f46e7b0f7c3a82a7c78d4ee"),
  "total": 123.45
}

使用 $lookup 连接两个集合

假设你想获取每个用户及其关联的所有订单,你可以使用以下聚合查询:

db.users.aggregate([
  {
    $lookup: {
      from: "orders", // 被连接的集合
      localField: "_id", // 当前集合中的字段
      foreignField: "userId", // 被连接集合中的字段
      as: "orders" // 结果集合的数组字段
    }
  },
  {
    $project: {
      _id: 1,
      name: 1,
      email: 1,
      orders: 1
    }
  }
])

这里的步骤说明如下:

  1. $lookup: 这个阶段实现了连接操作。它会查找orders集合中userIdusers集合中的_id相匹配的文档,并将匹配的结果作为数组添加到输出文档的orders字段中。

  2. $project: 这个阶段用于选择输出的字段。在这里我们选择了_id, name, email以及orders字段。

处理左连接 (Left Join)

如果你想要模拟SQL中的左连接(即使某些用户没有订单也要包括他们),可以在$lookup之后使用$match$project来处理那些没有匹配项的情况。

例如,如果你想显示没有订单的用户:

db.users.aggregate([
  {
    $lookup: {
      from: "orders",
      localField: "_id",
      foreignField: "userId",
      as: "orders"
    }
  },
  {
    $project: {
      _id: 1,
      name: 1,
      email: 1,
      orders: 1
    }
  },
  {
    $addFields: {
      hasOrders: { $size: "$orders" }
    }
  },
  {
    $sort: { hasOrders: 1 }
  }
])

在这个例子中,$addFields添加了一个新字段hasOrders,它表示用户是否有订单。$sort阶段按是否有订单排序。

总结

  • $lookup允许你基于两个集合中的字段进行连接。
  • 可以使用$project来选择输出哪些字段。
  • 使用$addFields$sort可以帮助你处理没有匹配项的情况。

postman下载地址Download Postman | Get Started for Free

使用get发起请求

使用post发起请求

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

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

相关文章

【JS】详解浏览器的5 种Observer: Mutation、Intersection、Performance、Resize、Reporting

文章目录 1、IntersectionObserver 交叉观察器用法使用场景 2、MutationObserver 变动观察器用法使用场景 3、ResizeObserver 尺寸变化观察器用法使用场景 4、PerformanceObserver 性能观察器用法使用场景 5、ReportingObserver用法使用场景 总结 网页开发中我们经常要处理用户…

第三方jar自带logback导致本地日志文件不生成

1.问题及解决 这是依赖的jar包,自己有logback,只打印到控制台,导致我们项目里配置的error级别日志不会生成到日志文件中去。ai给的答案是自己控制加载顺序,但很麻烦,--logging.config也不行,最好下了个7z压…

Grafana 可视化监控和告警

前言 在现代分布式系统和云原生环境中,为了确保复杂的分布式系统和服务的高可用性、可靠性和性能,通常采用实时可视化监控和分析,实现故障快速响应、资源优化和安全保障,从而提升用户满意度和运营效率。 在目前主流的解决方案中…

vue 获取当前页面路由

vue2 : import { getCurrentInstance } from ‘vue’; //获取当前页路由 data() { return { currentRouter: ‘’,//默认路由 } } const { proxy } getCurrentInstance(); this.currentRouter proxy.$router.currentRoute.meta.title vue3 : import …

智能语音电话机器人的优势有哪些?

现在每个企业的客服成本都是非常高的,但是工作效率还不高,有的还存在简单粗暴的情况,因此如果使用语音机器人的话,就将会发生重大的转变了,不仅会提高效率,还会降低很多的人力成本,,…

【浏览器】f12控制台,如何选中click、hover才出现的元素(断点调试)

使用断点调试 以切换语言的弹窗为例 当鼠标点击select框时才显现选项,没有办法直接选中元素进行样式的调试 1. 按f12打开控制台,点击sources,按 ctrlo 查找你要开发的文件 2. 给元素添加断点(如果操作的时候没有停,就…

丰田的接单式生产、零库存、快速换模之间关系如何?

前面讲了,丰田采用接单式生产,这让它的库存一直保持在较低水平,但这一切是怎么实现的?接单式生产、零库存和快速换模之间又有怎样的关系?今天就来简单聊下。 接单式生产 这可谓是丰田典型的快速响应。当4S门店销售人员…

[openSSL]TLS 1.3握手分析

文章目录 前言一、ECDHE密钥交换二、TLS单向身份认证三、TLS双向身份认证 前言 关于TLS握手网上资料很多,但是有一些写的很不清楚,导致学习时对概念和流程出现混淆,以下是我觉得写得比较清晰和准确的供学习参考。 浅析 TLS(ECDHE…

【C++ 面试 - 基础题】每日 3 题(十三)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

【原创】java+swing+mysql简单图书信息管理系统设计与实现

个人主页:程序员杨工 个人简介:从事软件开发多年,前后端均有涉猎,具有丰富的开发经验 博客内容:全栈开发,分享Java、Python、Php、小程序、前后端、数据库经验和实战 开发背景: 编程小白们刚入…

Lua语言基础学习:安装Lua和Lua库管理工具

Lua语言简介 Lua是一种轻量、高效、可嵌入的脚本语言,由巴西里约热内卢天主教大学的研究小组于1993年开发,Lua的解释器非常小巧,编译后的体积很小(如完整解释器不过200KB),这使得它非常适合嵌入到其他应用程…

基于Linux系统中的 【环境变量】 详细讲解

目录 一、环境变量的基本概念 二、环境变量的认识 1、常见的环境变量 2、查看环境变量的方法 3、环境变量的作用 4、和环境变量相关的命令 5、环境变量的组织方式 6、获取环境变量的方式 1)通过环境参数表获取 2)通过系统调用获取或设置环境变…

微信小程序开发组件和API(附源代码演示)

微信小程序组件参考文档:https://developers.weixin.qq.com/miniprogram/dev/component/ 微信开发者工具下载网址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 小程序开发指南:https://developers.weixin.qq…

Langchain框架深度剖析:解锁大模型-RAG技术的无限潜能,引领AI应用新纪元

文章目录 前言一、Langchain 框架概述二、大模型-RAG技术原理三、应用示例1.RAG案例一(私有文档直接读取-问答)2.RAG案例二(Vue上传文件结合文件内容回答问题)3.RAG案例三(Vue秒传文件结合文件内容回答问题&#xff09…

C语言——预处理详解(上)

目录 引言 预定义符号 define 定义常量 #define 定义宏 带有副作用的宏参数 宏替换的规则 宏和函数的对比 引言 在C语言编程中,预处理是编译前的关键步骤,它负责处理如宏定义、条件编译和文件包含等指令。今天我们来学习一下有关C语言——预处理…

洛谷 3道 函数 题目 题解 (超详细)

题目目录: No.1 B2137 判决素数个数 No.2 B2138 最大质因子序列 No.3 B2140 二进制分类 OK,开始正文! 第一题: B2137 判决素数个数 题目描述 求 X,Y 之间的素数个数(包括 X 和 Y)。 输入…

LB-8100A 推拉力测试机精密推拉力试验机

LB-8100A 多功能推拉力测试机广泛应于与 LED 封装测试、IC 半导体封 装测试、TO 封装测试、IGBT 功率模块封装测试、光电子元器件封装测试、汽 车领域、航天航空领域、军工产品测试、研究机构的测试及各类院校的测试 研究等应用。 多功能推拉力测试机精密推拉力试验机 *设备硬件…

地热模拟软件opengeosys-OGS安装和学习1

1.下载地址 官网:https://www.opengeosys.org/ 界面Gina:https://discourse.opengeosys.org/t/gina-version-3-24/175 https://teambeam.bgr.de/my/drive/folder/68(注意下载压缩包,有些注册表需要处理) 2.处理 下…

视频汇聚平台智能边缘分析一体机分析平台摄像头异常位移算法识别检测

智能边缘分析一体机在摄像头异常位移检测方面扮演着关键角色,它利用先进的图像处理技术和机器学习算法来实时监测摄像头状态,判断是否发生了非预期的位移。下面是智能边缘分析一体机如何检测摄像头异常位移的详细步骤: 1. 图像帧对比&#x…

内部排序(二路归并、基数、计数)

【内部排序(插入、交换、选择)】 一、二路归并排序 1. 算法思想与实现步骤 1)算法思想: 二路归并排序是一种分治算法。它将待排序的序列分为两个子序列,分别对这两个子序列进行排序,然后将两个已排序的子…