定義
ドキュメントのグループ全体の数値の平均を返します。
$avgアキュムレータは、次のステージで使用できます。
注意
曖昧さ回避
このページでは、アキュムレータとして使用する場合の$avg について説明します。アキュムレータは、入力ドキュメントのグループ全体の合計、最大、または最小などの単一の集計値を返します。
次の他のコンテキストでは $avg を使用することもできます。
$avg (expression)は、配列内の数値要素の平均を返します。$avg (window function)$setWindowFields。これは特定のウィンドウ内のドキュメントからの平均 値を返すために ステージで使用されます。
構文
{ $avg: <expression> }
動作
結果の型
デフォルトの戻り値の型は double です。少なくとも 1 つの入力値が小数の場合、戻り値の型は小数になります。
数値以外の値または欠損値
$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 } ]