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

MongoDB Mongoose 关联两集合实现按月统计各套餐活跃订阅量

MongoDB 聚合查询补充实现方案

你当前已完成有效订阅过滤、套餐关联的逻辑,接下来需要补充5个聚合阶段即可实现目标格式的统计结果,完整聚合管道如下:

[
  // 你已有的逻辑:过滤未到期的有效订阅
  {
    "$match": {
      "$expr": {
        "$gt": ["$end_time", new Date()]
      }
    }
  },
  // 你已有的逻辑:关联packages集合获取套餐信息
  {
    "$lookup": {
      "from": "packages",
      "localField": "package",
      "foreignField": "_id",
      "as": "package"
    }
  },
  // 新增1:展开lookup返回的package数组,每个订阅对应单条套餐数据
  {
    "$unwind": "$package"
  },
  // 新增2:提取订阅到期时间的月份字段,作为分组依据
  {
    "$addFields": {
      "month": { "$month": "$end_time" }
    }
  },
  // 新增3:按「月份+套餐名称」分组,统计每个分组的活跃订阅数
  {
    "$group": {
      "_id": {
        "month": "$month",
        "package_name": "$package.package_name"
      },
      "total_active": { "$sum": 1 }
    }
  },
  // 新增4:按月份二次分组,将同月份所有套餐的统计结果聚合为数组
  {
    "$group": {
      "_id": "$_id.month",
      "packages": {
        "$push": {
          "package_name": "$_id.package_name",
          "total_active": "$total_active"
        }
      }
    }
  },
  // 新增5:调整输出字段格式,匹配目标结构
  {
    "$project": {
      "_id": 0,
      "month": "$_id",
      "packages": 1
    }
  }
]

补充说明(含0活跃套餐输出方案)

上述代码默认只会统计当月有活跃订阅的套餐,如果需要输出所有套餐(当月无活跃订阅的统计为0),可以在管道最开头加入全量套餐拉取、月份与套餐笛卡尔积的逻辑,再左关联上述统计结果补0即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:36:03