정의
특정 창 에 있는 값의 평균을 반환합니다.
참고
명확화
이 페이지에서는 창 함수로 사용되는 경우의 $avg에 대해 설명합니다.
다음과 같은 다른 컨텍스트에서도 $avg를 사용할 수 있습니다.
$avg (accumulator)는 다양한 입력 문서 수를 기반으로 애그리게이션된 단일 값을 반환합니다.$avg (expression)배열 에 있는 숫자 요소의 평균을 반환합니다.
구문
{ $setWindowFields: { ... output: { <field>: { $avg: <expression> } } } }
행동
결과 유형
기본값 반환 유형은 더블입니다. 하나 이상의 입력 값이 10진수인 경우 반환 유형은 10진수입니다.
숫자가 아니거나 누락된 값
$avg 누락된 값을 포함하여 숫자가 아닌 값을 무시합니다. 모든 입력 값이 숫자가 아닌 경우 $avg은 null을 반환합니다.
예시
캘리포니아주(CA)와 워싱턴주(WA)의 케이크 판매량이 포함된 cakeSales collection을 생성합니다.
db.cakeSales.insertMany( [ { _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"), state: "CA", price: 13, quantity: 120 }, { _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"), state: "WA", price: 14, quantity: 140 }, { _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"), state: "CA", price: 12, quantity: 145 }, { _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"), state: "WA", price: 13, quantity: 104 }, { _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"), state: "CA", price: 41, quantity: 162 }, { _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"), state: "WA", price: 43, quantity: 134 } ] )
이 예시 $avg 창 함수를 사용하여 각 state에 대한 케이크 판매 quantity에 대한 이동 평균을 출력합니다. 각 상태 에 대해 주문의 평균 수량과 이전 모든 주문을 포함하는 필드 각 문서 에 추가합니다.
db.cakeSales.aggregate( [ { $setWindowFields: { partitionBy: "$state", sortBy: { orderDate: 1 }, output: { averageQuantityForState: { $avg: "$quantity", window: { documents: [ "unbounded", "current" ] } } } } } ] )
CA 및 WA의 이동 평균 quantity이 averageQuantityForState 필드 에 표시됩니다.
[ { _id: 4, type: 'strawberry', orderDate: ISODate('2019-05-18T16:09:01.000Z'), state: 'CA', price: 41, quantity: 162, averageQuantityForState: 162 }, { _id: 0, type: 'chocolate', orderDate: ISODate('2020-05-18T14:10:30.000Z'), state: 'CA', price: 13, quantity: 120, averageQuantityForState: 141 }, { _id: 2, type: 'vanilla', orderDate: ISODate('2021-01-11T06:31:15.000Z'), state: 'CA', price: 12, quantity: 145, averageQuantityForState: 142.33333333333334 }, { _id: 5, type: 'strawberry', orderDate: ISODate('2019-01-08T06:12:03.000Z'), state: 'WA', price: 43, quantity: 134, averageQuantityForState: 134 }, { _id: 3, type: 'vanilla', orderDate: ISODate('2020-02-08T13:13:23.000Z'), state: 'WA', price: 13, quantity: 104, averageQuantityForState: 119 }, { _id: 1, type: 'chocolate', orderDate: ISODate('2021-03-20T11:30:05.000Z'), state: 'WA', price: 14, quantity: 140, averageQuantityForState: 126 } ]
앞의 예시에서
partitionBy: "$state"는 collection의 문서를state로 파티셔닝합니다.CA및WA에 대한 파티션이 있습니다.sortBy: { orderDate: 1 }각 파티션의 문서를orderDate을 기준으로 오름차순(1)으로 정렬하므로, 가장 이른orderDate이 첫 번째가 됩니다.
outputaverageQuantityForState필드 문서 창 에 있는 문서의 이동 평균quantity로 설정합니다.이 창
unbounded하한과 출력의current문서 사이의 문서가 포함됩니다. 즉,$avg는 파티션의 시작 부분과 현재 문서 (포함) 사이의 문서에 대한quantity의 이동 평균을 반환합니다.