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

MongoDB聚合查询:返回匹配文档明细及指定字段求和结果

MongoDB 聚合查询实现

你可以直接使用如下聚合管道实现需求,核心通过$facet阶段同时完成明细筛选和全局汇总计算,不需要多次扫描集合:

db.你的实际集合名.aggregate([
  // 第一阶段:条件过滤,按实际业务替换匹配规则即可
  {
    $match: {
      // 此处填写你的过滤规则,示例:按时间、城市筛选
      // createTime: { $gte: ISODate("2024-01-01T00:00:00Z") },
      // city: "Udaypur"
    }
  },
  // 并行执行两个独立聚合分支
  {
    $facet: {
      // 分支1:生成result数组,仅保留要求的公共字段
      result: [
        {
          $project: {
            _id: 1,
            bus: 1,
            city: 1,
            AccountName: 1,
            agencyName: 1,
            depotName: 1
          }
        }
      ],
      // 分支2:计算指定数值字段的全局总和
      aggregates: [
        {
          $group: {
            _id: null,
            CashCollection: { $sum: "$CashCollection" },
            Collection: { $sum: "$Collection" },
            IssueTicket: { $sum: "$IssueTicket" },
            PassengerCount: { $sum: "$PassengerCount" },
            TicketCount: { $sum: "$TicketCount" }
          }
        },
        // 移除group阶段自动生成的_id字段
        {
          $project: {
            _id: 0
          }
        }
      ]
    }
  },
  // 把aggregates从长度为1的数组转为单个对象,匹配预期结构
  {
    $addFields: {
      aggregates: { $arrayElemAt: ["$aggregates", 0] }
    }
  }
])

管道阶段说明

  • $match:作为第一阶段执行可以命中集合索引,大幅提升查询效率,过滤规则根据实际业务调整即可
  • $facet:单次查询同时完成明细提取和汇总计算,避免两次查询重复扫描集合数据
  • 最终结构调整阶段:把汇总分支返回的数组格式转为对象格式,和预期返回结构完全对齐

返回效果

执行后返回的结果和你给出的预期结构完全一致:

{
  result: [
    {
     _id: "6284b519313f50001595fe37",
     "bus": "EXAMP",
     "city": "Udaypur",
     "AccountName": "Examp Transport Service",
     "agencyName": "Sbb",
     "depotName": "RAYAPUR HUBLI"
    },
    {
     _id: "62684658703e9e00136ec64c",
     "bus": "EXAMP",
     "city": "Kanpur",
     "AccountName": "Example Transport Service",
     "agencyName": "BBS",
     "depotName": "RAYAPUR HUBLI"
    }
  ],
  aggregates: {
   "CashCollection": 18,
  "Collection": 50,
  "IssueTicket": 12,
  "PassengerCount": 9,
  "TicketCount": 8
 }
}

注意:生产环境使用时必须在$match阶段配置合理的过滤条件,禁止无过滤条件查询全表,避免引发数据库性能问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:27:23