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

如何关联MongoDB多个Collection,按启用分类返回含完整Item的Package列表

实现方案

直接在Category集合上执行以下MongoDB聚合查询即可得到符合要求的返回结果:

db.category.aggregate([
  // 筛选status为true的有效分类
  {
    $match: {
      status: true
    }
  },
  // 关联查询对应分类下的所有Package数据
  {
    $lookup: {
      from: "package",
      localField: "id",
      foreignField: "categoryId",
      as: "package"
    }
  },
  // 拆分package数组便于单独处理每个套餐的item关联
  {
    $unwind: "$package"
  },
  // 关联Item集合补全每个package的items完整信息
  {
    $lookup: {
      from: "item",
      localField: "package.items.itemId",
      foreignField: "id",
      as: "package.items"
    }
  },
  // 将拆分的package重新合并为数组
  {
    $group: {
      _id: "$_id",
      name: { $first: "$name" },
      status: { $first: "$status" },
      package: { $push: "$package" }
    }
  },
  // 移除不需要的默认_id字段,适配预期输出结构
  {
    $project: {
      _id: 0
    }
  }
])

逻辑说明

  • $match阶段先过滤出符合条件的分类,降低后续计算量
  • 第一次$lookup通过分类id关联Package集合,拿到对应分类下的所有套餐数据
  • $unwind将package数组拆分为单条文档,方便对每个套餐单独处理item关联逻辑
  • 第二次$lookup直接传入当前套餐所有item的itemId数组,批量匹配Item集合拿到完整Item对象,直接替换原有items字段
  • $group阶段按分类id分组,把拆分的套餐文档重新合并为数组
  • 最后$project阶段剔除MongoDB默认生成的内部_id字段,输出结构完全匹配预期

内容的提问来源于stack exchange,提问作者Sufail Kalathil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:24:03