MongoDB聚合查询统计产品平均数量结果为null如何解决
MongoDB聚合查询返回空值问题修正
原查询错误点
- 字段引用错误:
$project阶段引用了不存在的$item字段(集合中商品数组字段名为items),导致投影出的product、quantity字段全为null - 匹配条件写法错误:
$match阶段对year字段重复赋值,JS对象中同键名后写的值会覆盖前者,实际生效的筛选条件仅为year <= 2020,没有实现2018-2020的范围筛选 - 缺少数组拆分步骤:
items是嵌套数组结构,单个订单可能包含多个商品,未使用$unwind拆分数组的情况下,无法按单个商品维度做分组统计 - 分组取值逻辑错误:分组阶段引用数组字段
$items.quantity计算平均值,且分组键取了不存在的$product字段,最终返回null结果
修正后的聚合查询
调整管道执行顺序,优先做数据筛选减少计算量,拆分商品数组后再做分组统计:
db.UAS0456.aggregate([ // 筛选2018-2020年的订单 { $match: { $expr: { $and: [ { $gte: [ { $year: "$day" }, 2018 ] }, { $lte: [ { $year: "$day" }, 2020 ] } ] } } }, // 拆分商品数组,每个商品项生成独立文档 { $unwind: "$items" }, // 按商品ID分组,计算平均购买数量 { $group: { _id: "$items.product", averageOfQuantity: { $avg: "$items.quantity" } } } ])
样例数据对应返回结果
{ "_id" : "p1", "averageOfQuantity" : 15 } { "_id" : "p2", "averageOfQuantity" : 4 } { "_id" : "p3", "averageOfQuantity" : 2.5 }
内容的提问来源于stack exchange,提问作者LIVYA SUSILO
相关产品推荐
相关产品推荐

