MongoDB的$avg表达式用于计算一组数值的平均值,其核心特性及使用方法如下:
一、基本语法与特性二、典型应用示例示例1:基础平均值计算db.sales.aggregate([ { $group: { _id: "$item", averageQty: { $avg: "$quantity" } } }])结果解析:
- 按商品名称分组后计算平均销量
- Americanos:(22+12+21+15)/4=17.5
- Cappuccino:(12+20+17)/3≈16.33
示例2:复合表达式计算db.sales.aggregate([ { $group: { _id: "$item", averageAmount: { $avg: { $multiply: ["$quantity", "$price"] } } } }, { $sort: { averageAmount: 1 } }])关键点:
- 使用$multiply先计算每笔订单金额(数量×单价)
- 结果排序显示Cappuccino平均金额最低(127.33),Lattes最高(562.5)
示例3:带过滤条件的聚合db.sales.aggregate([ { $group: { _id: "$item", averageAmount: { $avg: { $multiply: ["$quantity", "$price"] } } } }, { $match: { averageAmount: { $gt: 150 } } }, { $sort: { averageAmount: 1 } }])执行逻辑:
- 先分组计算各商品平均金额
- 通过$match筛选出平均金额>150的商品
- 最终仅保留Mochas(275)和Lattes(562.5)
三、注意事项- 性能优化:在大型集合上,建议先使用$match过滤数据再计算
- 精度问题:浮点数计算可能存在微小精度误差(如示例中的16.333...)
- 替代方案:需要加权平均时,可结合$sum和$divide手动实现
四、扩展应用// 计算不同尺寸商品的平均单价db.sales.aggregate([ { $group: { _id: "$size", avgPrice: { $avg: "$price" } } }])// 多字段分组计算db.sales.aggregate([ { $group: { _id: { item: "$item", size: "$size" }, avgQty: { $avg: "$quantity" } } }])通过灵活组合$avg与其他聚合操作符,可以实现复杂的数据分析需求。建议在实际使用时先通过$limit测试小样本数据,验证计算逻辑后再处理完整数据集。