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
相关产品推荐
相关产品推荐

