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

MongoDB嵌套数组分组统计交警上报报告总数问题求解

问题原因

原有聚合查询返回错误结果,核心是三个写法问题:

  • 文档中TRAFFIC-POLICE是数组类型,直接引用$TRAFFIC-POLICE.tpIdNum会返回当前文档下所有交警ID组成的数组,无法按单个交警维度分组
  • $addToSet累加器的作用是将所有匹配值存入去重数组,直接用它存字段值必然返回数组结构
  • $group阶段不能直接对嵌套数组路径调用$size这类数组运算符,写法不符合MongoDB聚合语法规则
修正后的聚合语句

需要先用$unwind打散交警数组,让每个交警对应一条独立的计算文档,再做分组统计:

db.trafficReport.aggregate([
  // 拆分TRAFFIC-POLICE数组,单条文档对应一名交警
  { $unwind: "$TRAFFIC-POLICE" },
  {
    $group: {
      _id: {
        Name: "$TRAFFIC-POLICE.tpName",
        ID: "$TRAFFIC-POLICE.tpIdNum"
      },
      "Total Report": {
        $sum: { $size: "$TRAFFIC-POLICE.makeReport" }
      }
    }
  }
])
输出结果

执行后返回结果完全匹配需求格式:

{ "_id" : { "Name" : "Kevin Brown", "ID" : "KB001" }, "Total Report" : 2 }
{ "_id" : { "Name" : "Thomas Moore", "ID" : "TM001" }, "Total Report" : 1 }

你给出的期望结果中Kevin Brown对应ID写为KBB001,和你插入的测试数据中存储的KB001不一致,实际返回值以数据库存储的字段内容为准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:36:27