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

MongoDB에서 배열 문서를 집계하는 방법 – $min, $max 연산자 활용법

MongoDB에서 배열 문서를 집계하는 방법

MongoDB에서 배열(Array) 형태로 저장된 문서의 값을 집계하려면 애그리게이션 프레임워크(aggregate framework)를 사용해야 합니다. 이 글에서는 배열 안에 중첩된 여러 문서의 특정 필드 값에 대해 최솟값과 최댓값을 계산하는 과정을 단계별로 살펴보겠습니다.

1단계: 샘플 컬렉션 생성

먼저 배열 형태의 문서를 포함하는 컬렉션을 생성합니다. 아래 예시에서는 사용자 정보(UserDetails)가 배열로 저장되어 있으며, 각 요소는 사용자 이름과 로그인 연도를 담고 있습니다.

> db.aggregateArrayDemo.insertOne(
    {
       "_id":100,
       "UserDetails": [
          {
             "UserName": "John",
             "UserLoginYear":2010
          },
          {
             "UserName": "Carol",
             "UserLoginYear":2019
          }
       ]
    }
);
{ "acknowledged" : true, "insertedId" : 100 }

2단계: find() 메서드로 전체 문서 확인

컬렉션이 정상적으로 생성되었는지 확인하기 위해 find() 메서드로 모든 문서를 조회해 보겠습니다.

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

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{
   "_id" : 100,
   "UserDetails" : [
      {
         "UserName" : "John",
         "UserLoginYear" : 2010
      },
      {
         "UserName" : "Carol",
         "UserLoginYear" : 2019
      }
   ]
}

3단계: 애그리게이션으로 배열 문서 집계하기

이제 핵심 단계입니다. aggregate() 메서드를 사용하여 배열 내 문서들을 집계합니다. 여기서는 두 개의 파이프라인 단계를 활용합니다.

  • $match: _id가 100인 문서만 필터링합니다.
  • $project: 출력할 필드를 지정하며, $min과 $max 연산자로 UserLoginYear 필드의 최솟값과 최댓값을 각각 계산합니다.
> db.aggregateArrayDemo.aggregate([
   {
      $match: { _id: 100 }
   },
   {
      $project: {
         Minimum: { $min: "$UserDetails.UserLoginYear" },
         Maximum: { $max: "$UserDetails.UserLoginYear" }
      }
   }
]);

위 애그리게이션 쿼리를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

{ "_id" : 100, "Minimum" : 2010, "Maximum" : 2019 }

결과 해석

실행 결과를 보면 배열 내 두 사용자(John: 2010년, Carol: 2019년)의 로그인 연도 중 최솟값은 2010, 최댓값은 2019로 정상적으로 집계된 것을 확인할 수 있습니다. 이처럼 $match로 대상 문서를 좁히고, $project에서 $min, $max 같은 집계 연산자를 조합하면 배열로 중첩된 문서 데이터도 손쉽게 분석할 수 있습니다.