You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB $lookup实现一对多关联 按collegeId查询书籍及关联库存

MongoDB关联查询问题修正方案

原代码错误点

  • 第一阶段$match的过滤条件错误:books集合本身没有bookStocks字段,该字段是$lookup关联后才生成的,放在第一阶段过滤会直接匹配不到任何数据
  • $lookup的let变量取值错误:books集合中关联bookStocks的字段是主键_id,不是不存在的bookId
  • 关联子查询没有加collegeId过滤:会查出某本书所有学院的库存,不符合仅查询指定学院库存的需求
  • 缺少空数组过滤:没有对应学院库存的书籍不需要返回,需要最后过滤掉bookStocks为空的文档

正确聚合写法

注意该聚合是在books集合上执行,入参collegeId替换为你实际的参数值即可:

const pipeline = [
  // 关联bookStocks集合,匹配对应书籍+指定学院的库存
  {
    $lookup: {
      from: "bookStocks",
      let: { book_id: "$_id" }, // 取books集合的_id作为关联变量
      pipeline: [
        {
          $match: {
            $expr: {
              $eq: ["$$book_id", "$bookId"] // 库存的bookId和书籍_id匹配
            },
            collegeId: collegeId // 直接过滤指定学院的库存
          }
        }
      ],
      as: "bookStocks"
    }
  },
  // 过滤掉没有对应学院库存的书籍
  {
    $match: {
      bookStocks: { $ne: [] }
    }
  }
];

// 执行方式示例
db.books.aggregate(pipeline)

内容的提问来源于stack exchange,提问作者Haris George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:15:03