首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

$lookup多个级别

在MongoDB中,$lookup是聚合管道中的一个阶段,用于在两个集合之间执行左外连接。如果你需要在多个级别上进行连接,可以通过嵌套$lookup来实现。

以下是一个示例,展示了如何在三个集合之间进行多级连接:

假设我们有三个集合:orderscustomerscountries

  • orders集合包含订单信息,其中有一个字段customerId指向customers集合中的文档。
  • customers集合包含客户信息,其中有一个字段countryId指向countries集合中的文档。

集合结构

orders

代码语言:javascript
复制
{ "_id": 1, "customerId": 101, "product": "Laptop" }
{ "_id": 2, "customerId": 102, "product": "Phone" }

customers

代码语言:javascript
复制
{ "_id": 101, "name": "Alice", "countryId": 201 }
{ "_id": 102, "name": "Bob", "countryId": 202 }

countries

代码语言:javascript
复制
{ "_id": 201, "name": "USA" }
{ "_id": 202, "name": "Canada" }

聚合查询

我们可以使用嵌套的$lookup来实现多级连接:

代码语言:javascript
复制
db.orders.aggregate([
  {
    $lookup: {
      from: "customers",
      localField: "customerId",
      foreignField: "_id",
      as: "customerInfo"
    }
  },
  {
    $unwind: "$customerInfo"
  },
  {
    $lookup: {
      from: "countries",
      localField: "customerInfo.countryId",
      foreignField: "_id",
      as: "countryInfo"
    }
  },
  {
    $unwind: "$countryInfo"
  },
  {
    $project: {
      _id: 1,
      product: 1,
      customerName: "$customerInfo.name",
      countryName: "$countryInfo.name"
    }
  }
])

解释

  1. 第一级 $lookup:
    • customers集合中查找与orders集合中的customerId字段匹配的文档,并将结果存储在customerInfo字段中。
  2. $unwind:
    • 展开customerInfo数组,以便每个订单文档都包含一个单独的客户文档。
  3. 第二级 $lookup:
    • countries集合中查找与展开后的customerInfo.countryId字段匹配的文档,并将结果存储在countryInfo字段中。
  4. 再次 $unwind:
    • 展开countryInfo数组,以便每个订单文档都包含一个单独的国家文档。
  5. $project:
    • 重新格式化输出文档,只保留需要的字段。

输出

代码语言:javascript
复制
{ "_id": 1, "product": "Laptop", "customerName": "Alice", "countryName": "USA" }
{ "_id": 2, "product": "Phone", "customerName": "Bob", "countryName": "Canada" }

通过这种方式,你可以在MongoDB中实现多级连接。根据你的具体需求,可能需要调整字段名称和逻辑。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

共4个视频
RayData数据可视化经典案例
RayData实验室
RayData系列产品及服务广泛应用于智慧城市、政务、能源、园区、文旅等多个行业领域。
共2个视频
晞和讲堂【碳寻连接价值】系列直播
腾讯云开发者社区
“晞和讲堂”是腾讯云智慧能源全新推出的系列直播,“晞”寓意为企业能源数字化转型带来新变化;“和”寓意连接、融合、碳中和。晞和讲堂面向电力、石化、燃气、煤炭、钢铁等多个行业,通过专家分享能源前沿趋势和技术路径,助力客户数字化转型及低碳发展。
共50个视频
动力节点-SVN控制技术专题精讲教程-上
动力节点Java培训
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。
共9个视频
动力节点-SVN控制技术专题精讲教程-下
动力节点Java培训
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。
共32个视频
动力节点-Maven基础篇之Maven实战入门
动力节点Java培训
Maven这个单词的本意是:专家,内行,读音是['meɪv(ə)n]或['mevn]。Maven 是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用,Maven 是一款在大型项目开发过程中不可或缺的重要工具,Maven通过一小段描述信息可以整合多个项目之间的引用关系,提供规范的管理各个常用jar包及其各个版本,并且可以自动下载和引入项目中。
共10个视频
腾讯云大数据ES Serverless日志分析训练营
学习中心
Elasticsearch技术是日志分析场景的首选解决方案,随着数据规模的海量增长,数据的写入、存储、分析等面临挑战,降本增效的诉求也越来越高。基于开箱即用的ES Serverless服务,腾讯云开发者社区联合腾讯云大数据团队共同打造了本次训练营课程,鹅厂大牛带你30分钟快速入门ES,并通过多个实战演练,轻松上手玩转业务日志、服务器日志以及容器日志等日志分析场景。
共49个视频
动力节点-MyBatis框架入门到实战教程
动力节点Java培训
Maven是Apache软件基金会组织维护的一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。Maven 是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用,Maven 是一款在大型项目开发过程中不可或缺的重要工具,Maven通过一小段描述信息可以整合多个项目之间的引用关系,提供规范的管理各个常用jar包及其各个版本,并且可以自动下载和引入项目中。
领券