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

如何合并两个MongoDB聚合查询实现双维度用户统计?

合并MongoDB聚合查询实现多统计值一次性获取

当然可以把这两个查询合并成一次聚合操作,这样不仅减少了对数据库的请求次数,还能提升查询效率(只需要扫描一次符合条件的文档)。

核心思路是利用MongoDB的$cond条件操作符,在同一个$group阶段里同时计算两个统计值:

  1. 先通过$match统一筛选出isAdmin: false且isActive: true的用户
  2. 在$group阶段,用$sum配合$cond分别统计总数和近7天创建的用户数

下面是完整的实现代码:

var oneWeekAgo = new Date();
oneWeekAgo.setDate(oneWeekAgo.getDate() - 7);

User.aggregate([
  // 先过滤掉不符合基础条件的用户,减少后续处理数据量
  { 
    $match: { 
      isAdmin: false, 
      isActive: true 
    } 
  },
  // 一次性计算两个统计值
  { 
    $group: { 
      _id: null,
      // 统计所有符合基础条件的用户总数
      totalCount: { $sum: 1 },
      // 统计近7天创建的用户数:用$cond判断日期,满足则加1,否则加0
      lastWeekTotal: { 
        $sum: {
          $cond: {
            if: { $gte: ["$dateCreated", oneWeekAgo] },
            then: 1,
            else: 0
          }
        }
      }
    } 
  }
])

代码说明:

  • $match阶段:先把非管理员且活跃的用户筛选出来,避免后续处理无关数据,提升性能
  • totalCount:直接用$sum:1累加所有进入$group阶段的文档数量,就是符合基础条件的总用户数
  • lastWeekTotal:通过$cond判断当前文档的dateCreated是否晚于一周前的日期,满足条件则返回1,否则返回0,再用$sum累加这些值,得到近7天的用户数

执行这个聚合查询后,你会得到和预期一致的结果:

[ { _id: null, totalCount: 100 , lastWeekTotal: 10 } ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:17:39