MongoDB에서 특정 필드의 평균값을 구하려면 aggregate() 메서드와 $avg 연산자를 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 컬렉션 생성부터 평균 계산까지 단계별로 살펴보겠습니다.
1. 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용해 데모용 컬렉션에 학생별 점수 데이터를 삽입합니다.
> db.demo214.insertOne({"Marks":56,"Name":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3e319403d395bdc2134705")
}
> db.demo214.insertOne({"Marks":86,"Name":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3e319c03d395bdc2134706")
}
> db.demo214.insertOne({"Marks":78,"Name":"Carol"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3e31a403d395bdc2134707")
}2. 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo214.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e3e319403d395bdc2134705"), "Marks" : 56, "Name" : "David" }
{ "_id" : ObjectId("5e3e319c03d395bdc2134706"), "Marks" : 86, "Name" : "Bob" }
{ "_id" : ObjectId("5e3e31a403d395bdc2134707"), "Marks" : 78, "Name" : "Carol" }3. $avg 연산자로 평균 계산하기
이제 집계 파이프라인(aggregation pipeline)에서 $group 스테이지와 $avg 연산자를 조합하여 Marks 필드의 평균값을 계산합니다.
> db.demo214.aggregate(
... [
... {
... $group:
... {
... "_id":"_id",
... AverageValue: { $avg: "$Marks" }
... }
... }
... ]
...)실행 결과는 다음과 같습니다.
{ "_id" : "_id", "AverageValue" : 73.33333333333333 }쿼리 설명
- $group: 문서들을 하나의 그룹으로 묶는 스테이지입니다. 여기서는
_id를 기준으로 전체 문서를 하나의 그룹으로 처리했습니다. - $avg: 지정한 필드(여기서는
$Marks)의 산술 평균을 자동으로 계산해 줍니다.
세 문서의 점수는 각각 56, 86, 78이므로 평균은 (56 + 86 + 78) ÷ 3 = 약 73.33이 됩니다. 만약 특정 조건(예: 특정 이름의 학생만)에 해당하는 문서의 평균을 구하고 싶다면, $match 스테이지를 파이프라인 앞단에 추가하면 됩니다.