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

MongoDB条件聚合查询需求:按门店与KPI类型统计计数总和

MongoDB聚合查询实现:按指定storeCode和kpiType统计计数器总和

完整聚合查询代码

MongoDB Shell 版本

db.SensorData.aggregate([
  // 过滤符合指定storeCode和kpiType组合的文档
  {
    $match: {
      $or: [
        { storeCode: "111", kpiType: "trafficIn" },
        { storeCode: "222", kpiType: "trafficOut" }
      ]
    }
  },
  // 根据kpiType动态提取对应的计数值
  {
    $addFields: {
      count: {
        $switch: {
          branches: [
            { case: { $eq: ["$kpiType", "trafficIn"] }, then: "$trafficIn.countValue" },
            { case: { $eq: ["$kpiType", "trafficOut"] }, then: "$trafficOut.countValue" }
          ],
          default: 0 // 兼容未定义的kpiType,避免计算报错
        }
      }
    }
  },
  // 按storeCode和kpiType分组求和
  {
    $group: {
      _id: {
        storeCode: "$storeCode",
        kpiType: "$kpiType"
      },
      sum: { $sum: "$count" }
    }
  }
])

Node.js 版本(适配给定的conditions变量)

const conditions = [
  { storeCode: "111", kpiType: "trafficIn" },
  { storeCode: "222", kpiType: "trafficOut" }
];

const result = await db.collection("SensorData").aggregate([
  { $match: { $or: conditions } },
  {
    $addFields: {
      count: {
        $switch: {
          branches: [
            { case: { $eq: ["$kpiType", "trafficIn"] }, then: "$trafficIn.countValue" },
            { case: { $eq: ["$kpiType", "trafficOut"] }, then: "$trafficOut.countValue" }
          ],
          default: 0
        }
      }
    }
  },
  {
    $group: {
      _id: { storeCode: "$storeCode", kpiType: "$kpiType" },
      sum: { $sum: "$count" }
    }
  }
]).toArray();

各阶段说明

  1. $match 阶段:通过$or匹配所有目标storeCode和kpiType的组合,先过滤无关文档,减少后续计算的数据量,提升查询效率。
  2. $addFields 阶段:因为不同kpiType的计数值存放在不同嵌套字段中,用$switch根据kpiType动态提取对应countValue,统一存入count字段,简化后续聚合逻辑。
  3. $group 阶段:以storeCode和kpiType的组合作为分组键,用$sum对每个分组的count字段求和,得到每个组合的总计数。

查询结果

执行上述聚合后,将得到与需求完全匹配的结果:

[
  {
    "_id": { "storeCode": "111", "kpiType": "trafficIn" },
    "sum": 3
  },
  {
    "_id": { "storeCode": "222", "kpiType": "trafficOut" },
    "sum": 4
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:23:18