定义
返回文档组中数值的平均值。
$avg 累加器可在以下阶段使用:
注意
消歧
本页介绍了 $avg 用作 累加器 时的情况。累加器对一组输入文档返回单个聚合值,如总和、最大值或最小值。
您还可以在这些其他上下文中使用 $avg:
$avg (expression),返回数组中数值元素的平均值。$avg (window function),用于$setWindowFields阶段以返回特定窗口中文档的平均值。
语法
{ $avg: <expression> }行为
结果类型
默认返回类型是 double。如果至少有一个输入值是 decimal,则返回类型为 decimal。
非数值或缺失值
$avg 忽略非数字值,包括缺失值。如果所有输入值均非数字,则 $avg 会返回 null。
数组操作数
如果操作数解析为数组,则 $avg 将操作数视为非数值。
例子
使用以下文档创建 sales 集合:
db.sales.insertMany( [ { _id: 1, item: "abc", price: 10, quantity: 2, date: ISODate("2014-01-01T08:00:00Z") }, { _id: 2, item: "jkl", price: 20, quantity: 1, date: ISODate("2014-02-03T09:00:00Z") }, { _id: 3, item: "xyz", price: 5, quantity: 5, date: ISODate("2014-02-03T09:05:00Z") }, { _id: 4, item: "abc", price: 10, quantity: 10, date: ISODate("2014-02-15T08:00:00Z") }, { _id: 5, item: "xyz", price: 5, quantity: 10, date: ISODate("2014-02-15T09:12:00Z") }] )操作如下:
按
item字段对文档分组。使用
$avg累加器来计算每组的平均金额和平均数量。
db.sales.aggregate( [ { $group: { _id: "$item", avgAmount: { $avg: { $multiply: [ "$price", "$quantity" ] } }, avgQuantity: { $avg: "$quantity" } } } ])输出:
[ { _id: 'xyz', avgAmount: 37.5, avgQuantity: 7.5 }, { _id: 'abc', avgAmount: 60, avgQuantity: 6 }, { _id: 'jkl', avgAmount: 20, avgQuantity: 1 }]