MongoDB에서 컬렉션에 저장된 숫자 데이터의 평균값을 구하려면 $avg 집계 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 평균값을 계산하는 과정을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성하기
먼저 insertOne() 메서드를 사용해 테스트용 문서를 삽입합니다. 여기서는 가격(Price) 정보를 담은 세 개의 문서를 생성합니다.
> db.demo80.insertOne({"Details":{"Price":10.5}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2bf43271bf0181ecc42297")
}
> db.demo80.insertOne({"Details":{"Price":50.3}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2bf43871bf0181ecc42298")
}
> db.demo80.insertOne({"Details":{"Price":100.10}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2bf43f71bf0181ecc42299")
}2. 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.demo80.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e2bf43271bf0181ecc42297"), "Details" : { "Price" : 10.5 } }
{ "_id" : ObjectId("5e2bf43871bf0181ecc42298"), "Details" : { "Price" : 50.3 } }
{ "_id" : ObjectId("5e2bf43f71bf0181ecc42299"), "Details" : { "Price" : 100.1 } }3. $avg로 평균값 계산하기
평균값을 계산하려면 aggregate() 파이프라인과 $group 스테이지를 함께 사용합니다. _id 값을 null로 지정하면 전체 문서를 하나의 그룹으로 묶어 처리할 수 있습니다.
> db.demo80.aggregate([
... {
... "$group": {
... "_id": null,
... "AvgValue": {
... "$avg": "$Details.Price"
... }
... }
... }
... ]);실행 결과
{ "_id" : null, "AvgValue" : 53.633333333333326 }쿼리 설명
- $group: 문서들을 지정한 기준으로 그룹화합니다.
_id: null로 설정하면 모든 문서가 하나의 그룹으로 합쳐집니다. - $avg: 그룹 내 필드 값들의 산술 평균을 계산합니다. 여기서는 중첩된 필드인
Details.Price를 대상으로 계산했습니다.
이처럼 MongoDB의 애그리게이션 프레임워크를 활용하면 복잡한 통계 연산도 간단한 파이프라인 작성만으로 손쉽게 처리할 수 있습니다. 참고로 특정 조건에 맞는 문서만 대상으로 평균을 구하고 싶다면, $match 스테이지를 $group 앞에 추가하면 됩니다.