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

MongoDB如何跨多集合聚合统计关联的活动记录总数?

实现方案

你可以直接在group_lists集合上执行以下聚合查询实现需求:

// 基础实现版本
db.group_lists.aggregate([
  // 关联groups集合,获取当前group_list对应的所有分组
  {
    $lookup: {
      from: "groups",
      localField: "_id",
      foreignField: "group_list_id",
      as: "related_groups"
    }
  },
  // 展开分组数组,用于后续关联活动数据
  {
    $unwind: {
      path: "$related_groups",
      preserveNullAndEmptyArrays: true
    }
  },
  // 关联activities集合,获取每个分组对应的活动列表
  {
    $lookup: {
      from: "activities",
      localField: "related_groups._id",
      foreignField: "group_id",
      as: "related_activities"
    }
  },
  // 按group_list维度分组,统计总活动数
  {
    $group: {
      _id: "$_id",
      title: { $first: "$title" },
      total_activities: { $sum: { $size: "$related_activities" } }
    }
  },
  // 可选:按_id升序排列,对齐示例输出顺序
  { $sort: { _id: 1 } }
])

步骤说明

  • $lookup关联groups集合:将每个group_lists文档匹配到的关联分组存入related_groups数组
  • $unwind拆分数组:将数组结构的关联分组拆分为单条数据,方便后续关联活动集合,preserveNullAndEmptyArrays参数保证没有关联分组的group_lists数据不会被过滤
  • 第二次$lookup关联activities集合:拿到每个分组对应的所有活动存入related_activities数组
  • $group聚合统计:按group_lists的_id分组,保留原有title字段,累加所有分组的活动数量得到总活动数
  • $sort可选排序:不需要对齐示例顺序可直接删除该阶段

高性能优化版本

数据量较大时推荐使用该方案,避免$unwind操作带来的性能损耗:

db.group_lists.aggregate([
  {
    $lookup: {
      from: "groups",
      let: { gl_id: "$_id" },
      pipeline: [
        // 匹配当前group_list对应的分组
        { $match: { $expr: { $eq: ["$group_list_id", "$$gl_id"] } } },
        // 直接统计每个分组对应的活动数量
        {
          $lookup: {
            from: "activities",
            localField: "_id",
            foreignField: "group_id",
            as: "acts"
          }
        },
        { $project: { act_count: { $size: "$acts" }, _id: 0 } }
      ],
      as: "group_act_counts"
    }
  },
  // 直接累加所有分组的活动数得到总数
  {
    $project: {
      title: 1,
      total_activities: { $sum: "$group_act_counts.act_count" }
    }
  },
  { $sort: { _id: 1 } }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:15:04