Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB 집계 프레임워크로 전체 필드의 평균값 구하는 방법

MongoDB에서 특정 필드 전체의 평균값을 계산하려면 aggregate() 메서드와 함께 $avg 연산자를 사용하면 됩니다. 이 글에서는 예제 컬렉션을 만들고, 집계 파이프라인으로 플레이어 게임 점수의 평균을 구하는 과정을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성

먼저 insertOne() 메서드를 사용해 문서가 담긴 컬렉션을 생성합니다.

> db.averageAggregationDemo.insertOne({"PlayerGameScore":45});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9ed66bd628fa4220163b95")
}
> db.averageAggregationDemo.insertOne({"PlayerGameScore":55});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9ed671d628fa4220163b96")
}
> db.averageAggregationDemo.insertOne({"PlayerGameScore":65});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9ed676d628fa4220163b97")
}
> db.averageAggregationDemo.insertOne({"PlayerGameScore":35});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9ed67bd628fa4220163b98")
}
> db.averageAggregationDemo.insertOne({"PlayerGameScore":16});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9ed701d628fa4220163b99")
}

2. 저장된 문서 확인하기

find() 메서드에 pretty()를 적용하면 컬렉션의 모든 문서를 보기 좋게 출력할 수 있습니다.

> db.averageAggregationDemo.find().pretty();

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5c9ed66bd628fa4220163b95"), "PlayerGameScore" : 45 }
{ "_id" : ObjectId("5c9ed671d628fa4220163b96"), "PlayerGameScore" : 55 }
{ "_id" : ObjectId("5c9ed676d628fa4220163b97"), "PlayerGameScore" : 65 }
{ "_id" : ObjectId("5c9ed67bd628fa4220163b98"), "PlayerGameScore" : 35 }
{ "_id" : ObjectId("5c9ed701d628fa4220163b99"), "PlayerGameScore" : 16 }

3. 집계로 전체 필드의 평균 구하기

이제 $group 단계와 $avg 연산자를 조합한 집계 쿼리로 PlayerGameScore 필드 전체의 평균값을 계산해 보겠습니다.

> db.averageAggregationDemo.aggregate({ "$group": { "_id": null, "PlayerGameScoreAverage": { "$avg": "$PlayerGameScore" } } });

실행 결과는 다음과 같습니다.

{ "_id" : null, "PlayerGameScoreAverage" : 43.2 }

쿼리 동작 원리

이 쿼리가 동작하는 핵심은 두 가지입니다.

$group 단계: 문서들을 그룹화하는 역할을 합니다. 여기서 _id 값을 null로 지정하면 모든 문서가 하나의 그룹으로 묶입니다. 즉, 조건 없이 컬렉션 전체를 대상으로 연산하게 됩니다.

$avg 연산자: 지정한 필드 값들의 산술 평균을 계산하는 누적 연산자입니다. 위 예제에서는 각 문서의 PlayerGameScore 값(45, 55, 65, 35, 16)을 모두 더한 뒤 문서 수(5)로 나누어 43.2라는 결과를 반환합니다.

만약 특정 조건(예: 점수가 40 이상인 문서)에 대해서만 평균을 구하고 싶다면, $group 앞에 $match 단계를 추가하면 됩니다. 이처럼 MongoDB의 집계 프레임워크는 단순 평균뿐 아니라 $sum, $min, $max 등 다양한 누적 연산자와 조합해 복잡한 데이터 분석도 손쉽게 처리할 수 있습니다.