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

MongoDB对Order模型实现含已完成订单统计的复杂聚合查询

Mongoose 订单按用户分组聚合(含已完成订单统计)实现

直接在原有$group阶段通过$cond条件运算符做条件累加即可,单次聚合就能返回所有需要的字段,不需要拆分查询,修改后的代码如下:

const usersOrderSummary = await Order.aggregate([
  {
    $match: {} // 全量统计留空即可,需要筛选指定时间/状态的订单可在此处加匹配规则
  },
  {
    $group: {
      _id: "$user",
      // 保留原有全量订单统计逻辑
      TotalSpent: { $sum: "$totalPrice" },
      TotalOrders: { $sum: 1 },
      // 追加已完成订单统计:仅统计isDelivered为true的订单
      TotalCompletedOrderSpent: {
        $sum: {
          $cond: [{ $eq: ["$isDelivered", true] }, "$totalPrice", 0]
        }
      },
      TotalCompletedOrders: {
        $sum: {
          $cond: [{ $eq: ["$isDelivered", true] }, 1, 0]
        }
      }
    }
  }
])

逻辑说明

  • 原有统计字段TotalSpent、TotalOrders的计算逻辑和返回结果完全和之前一致,不会影响现有业务
  • $cond为聚合管道的条件判断表达式,配合$sum累加器即可实现条件求和、条件计数:判断订单是否满足isDelivered: true,满足则累加对应金额/计数+1,不满足则加0,不影响总和计算
  • 返回结果结构完全匹配需求,每个用户的统计项会自动追加已完成订单的两个统计字段

若存在isDelivered字段为null或未赋值的历史订单,上述逻辑会默认将其归为未完成订单,不计入已完成统计,符合常规业务逻辑。如果需要调整已完成订单的判定规则,直接修改$cond内的判断条件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:12:35