定义
返回数值大量元素的平均值。
注意
消歧
本页介绍了用作表达式时的 $avg,该表达式返回大量中数字元素的平均值。
您还可以在其他上下文中使用 $avg:
$avg (accumulator),它会根据可变数量的输入文档返回单个聚合值。$avg (window function),在$setWindowFields阶段用于返回特定窗口中文档值的平均值。
语法
用作表达式时,$avg 采用以下语法之一:
{ $avg: <expression> }
在此语法中,操作数是解析为大量的单个表达式。 $avg 遍历大量并返回数组数值的平均值。示例,{ $avg: "$testScores" } 返回 testScores大量字段中数值的平均值。
{ $avg: [ <expression1>, <expression2> ... ] }
在此语法中,输入大量中的每个表达式都是单个数值。 $avg 返回各个输入值的平均值。如果任何输入表达式解析为大量,则 $avg 不会遍历该大量,而是将该大量视为非数字值。
行为
结果类型
默认返回类型为双精度值。如果至少一个输入值为十进制,则返回类型为十进制。
非数值或缺失值
$avg 忽略非数字值,包括缺失值。如果所有输入值都是非数字值,则 $avg 返回 null。
例子
使用以下文档创建 students 集合:
db.students.insertMany( [ { _id: 1, quizzes: [ 10, 6, 7 ], labs: [ 5, 8 ], final: 80, midterm: 75 }, { _id: 2, quizzes: [ 9, 10 ], labs: [ 8, 8 ], final: 95, midterm: 80 }, { _id: 3, quizzes: [ 4, 5, 5 ], labs: [ 6, 5 ], final: 78, midterm: 70 } ] )
以下操作在 $project 阶段使用 $avg 来计算以下字段的平均值:
quizzeslabsfinal和midterm的合并平均值
db.students.aggregate( [ { $project: { quizAvg: { $avg: "$quizzes"}, labAvg: { $avg: "$labs" }, examAvg: { $avg: [ "$final", "$midterm" ] } } } ] )
输出
[ { _id: 1, quizAvg: 7.666666666666667, labAvg: 6.5, examAvg: 77.5 }, { _id: 2, quizAvg: 9.5, labAvg: 8, examAvg: 87.5 }, { _id: 3, quizAvg: 4.666666666666667, labAvg: 5.5, examAvg: 74 } ]