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

MongoDB에서 배열 요소의 평균값 구하는 방법 – $avg 연산자 활용 가이드

MongoDB에서 배열(array)에 저장된 여러 값들의 평균을 계산해야 하는 경우가 자주 있습니다. 예를 들어 학생의 과목별 점수가 배열로 저장되어 있을 때 전체 평균 점수를 구하고 싶다면, 집계 파이프라인(aggregation pipeline)에서 $avg 연산자를 사용하면 됩니다.

테스트용 컬렉션 생성하기

먼저 실습을 위해 문서(document)를 포함한 컬렉션을 생성해 보겠습니다. insertOne() 메서드를 사용하여 점수 배열을 저장합니다.

> db.demo584.insertOne({"Marks":[75,50,85,60,80]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e91d827fd2d90c177b5bcc2")
}

저장된 문서 확인하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다. pretty()를 함께 사용하면 결과를 보기 좋게 정렬된 형태로 출력할 수 있습니다.

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

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

{
   "_id" : ObjectId("5e91d827fd2d90c177b5bcc2"),
   "Marks" : [
      75,
      50,
      85,
      60,
      80
   ]
}

$avg 연산자로 배열 요소의 평균 구하기

배열 요소들의 평균값을 계산하려면 aggregate() 메서드와 함께 $project 단계 안에서 $avg 연산자를 사용합니다. 아래 쿼리는 Marks 배열의 모든 요소에 대한 평균을 MarksAvg라는 새 필드로 출력합니다.

> db.demo584.aggregate([
...    { $project: { MarksAvg: { $avg: "$Marks"} } }
... ])

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

{ "_id" : ObjectId("5e91d827fd2d90c177b5bcc2"), "MarksAvg" : 70 }

결과 해석

배열에 저장된 점수는 75, 50, 85, 60, 80이며, 이 값들의 합은 350입니다. 따라서 평균은 350 ÷ 5 = 70으로 계산됩니다. 이처럼 $avg 연산자는 배열 내 숫자 요소들을 자동으로 인식하여 평균값을 손쉽게 반환해 줍니다.

참고로 $avg 연산자는 숫자가 아닌 값(문자열 등)은 무시하고 계산하며, 배열에 유효한 숫자 값이 하나도 없으면 결과로 null을 반환한다는 점도 기억해 두면 좋습니다.