定義
数値配列要素の平均を返します。
注意
曖昧さ回避
このページでは、配列内の数値要素の平均を返す式として使用される場合の$avg について説明します。
次の他のコンテキストでは $avg を使用することもできます。
$avg (accumulator)は、入力ドキュメントの変数に基づいて単一の集計値を返します。$avg (window function)$setWindowFields。これは特定のウィンドウ内のドキュメントからの平均 値を返すために ステージで使用されます。
構文
式として使用する場合、$avg は次のいずれかの構文をとります。
{ $avg: <expression> }
この構文では 、オペランドは配列に変換される単一の式です。 $avg は配列をトラバースし、配列の数値の平均を返します。例、{ $avg: "$testScores" } は testScores 配列フィールドの数値の平均を返します。
{ $avg: [ <expression1>, <expression2> ... ] }
この構文では 、入力配列内の各式は 1 つの数値です。$avg は個々の入力値の平均を返します。入力式のいずれかが配列に変換される場合、$avg は配列を走査せず、代わりに配列を数値以外の値として扱います。
動作
結果の型
デフォルトの戻り値の型は double です。少なくとも 1 つの入力値が小数の場合、戻り値の型は小数になります。
数値以外の値または欠損値
$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 } ] )
次の操作では、$avg $projectステージの を使用して、次のフィールドの平均を計算します。
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 } ]