mongodb连表查询,postman使用

要实现与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": "[email protected]"
}
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发起请求

相关推荐
cookqq6 分钟前
mongodb源码分析session异步接受asyncSourceMessage()客户端流变Message对象
数据库·sql·mongodb·nosql
呼拉拉呼拉17 分钟前
Redis故障转移
数据库·redis·缓存·高可用架构
什么都想学的阿超20 分钟前
【Redis系列 04】Redis高可用架构实战:主从复制与哨兵模式从零到生产
数据库·redis·架构
pp-周子晗(努力赶上课程进度版)41 分钟前
【MySQL】视图、用户管理、MySQL使用C\C++连接
数据库·mysql
斯特凡今天也很帅1 小时前
clickhouse常用语句汇总——持续更新中
数据库·sql·clickhouse
超级小忍2 小时前
如何配置 MySQL 允许远程连接
数据库·mysql·adb
吹牛不交税2 小时前
sqlsugar WhereIF条件的大于等于和等于查出来的坑
数据库·mysql
hshpy3 小时前
setting up Activiti BPMN Workflow Engine with Spring Boot
数据库·spring boot·后端
文牧之4 小时前
Oracle 审计参数:AUDIT_TRAIL 和 AUDIT_SYS_OPERATIONS
运维·数据库·oracle
篱笆院的狗4 小时前
如何使用 Redis 快速实现布隆过滤器?
数据库·redis·缓存