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

MongoDB에서 _id: null로 그룹화하여 문서의 평균값 계산하는 방법

MongoDB에서 컬렉션 전체 문서의 평균값을 구하고 싶다면 $group 연산자와 함께 _id: null을 사용하면 됩니다. _id를 null로 지정하면 모든 문서가 하나의 그룹으로 묶이기 때문에, 전체 데이터에 대한 집계 결과를 손쉽게 얻을 수 있습니다.

기본 문법

평균값을 계산하는 기본적인 쿼리 문법은 다음과 같습니다.

db.yourCollectionName.aggregate([{$group: {_id:null, "anyFieldName": {$avg:"$yourFieldName"} } }]);

예제 컬렉션 생성하기

실습을 위해 먼저 문서가 포함된 컬렉션을 생성해 보겠습니다.

> db.caculateTheAverageValueDemo.insertOne({"Population":100});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd68a197924bb85b3f4895f")
}
> db.caculateTheAverageValueDemo.insertOne({"Population":500});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd68a1c7924bb85b3f48960")
}
> db.caculateTheAverageValueDemo.insertOne({"Population":200});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd68a237924bb85b3f48961")
}
> db.caculateTheAverageValueDemo.insertOne({"Population":100});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd68a297924bb85b3f48962")
}
> db.caculateTheAverageValueDemo.insertOne({"Population":100});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd68a2e7924bb85b3f48963")
}

위 예제에서는 인구(Population) 값을 가진 다섯 개의 문서를 삽입했습니다.

저장된 문서 확인하기

find() 메서드를 사용해 컬렉션의 모든 문서를 조회할 수 있습니다.

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

위 쿼리를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

{ "_id" : ObjectId("5cd68a197924bb85b3f4895f"), "Population" : 100 }
{ "_id" : ObjectId("5cd68a1c7924bb85b3f48960"), "Population" : 500 }
{ "_id" : ObjectId("5cd68a237924bb85b3f48961"), "Population" : 200 }
{ "_id" : ObjectId("5cd68a297924bb85b3f48962"), "Population" : 100 }
{ "_id" : ObjectId("5cd68a2e7924bb85b3f48963"), "Population" : 100 }

평균값 계산 쿼리 실행하기

이제 aggregate() 메서드와 $avg 연산자를 사용해 Population 필드의 평균값을 계산해 보겠습니다.

> db.caculateTheAverageValueDemo.aggregate([{$group: {_id:null, "AveragePopulation": {$avg:"$Population"} } }]);

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

{ "_id" : null, "AveragePopulation" : 200 }

결과 해석

출력 결과를 보면 _id가 null로 표시되는데, 이는 모든 문서가 하나의 그룹으로 묶였다는 의미입니다. 다섯 개 문서의 Population 값(100, 500, 200, 100, 100)을 모두 더하면 1,000이 되고, 이를 문서 수인 5로 나누면 평균값 200이 계산됩니다.

이처럼 $group 연산자에서 _id를 null로 설정하면 조건 없이 컬렉션 전체를 대상으로 평균($avg), 합계($sum), 최댓값($max), 최솟값($min) 등 다양한 집계 연산을 간편하게 수행할 수 있습니다.