首页
学习
活动
专区
工具
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中实现多级连接。根据你的具体需求,可能需要调整字段名称和逻辑。

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

相关·内容

8分36秒

59 运算符的有限级别

2分22秒

SFTPServer如何共享多个目录

27分23秒

107-DWD层-订单事实预处理表-需求分析&获取原始表和LookUp表

7分31秒

16-多个realm代码实现

12分12秒

165-MySQL隔离级别的查看和设置

5分27秒

Windows server IE浏览器安全级别调整

9分25秒

114-声明式事务的属性之隔离级别

8分42秒

22 - 尚硅谷-RBAC权限实战 - 权限模型级别.avi

12分27秒

43_锁绑定多个条件Condition

24分44秒

137_尚硅谷_MySQL基础_演示事务的隔离级别

19分49秒

164-数据并发问题与4种隔离级别

5分49秒

10-搭建MyBatis框架之源码验证和日志级别

领券