MongoDB에서 Aggregation Pipeline이란?

발행: (2025년 12월 14일 오후 11:47 GMT+9)
2 min read
원문: Dev.to

Source: Dev.to

MongoDB 집계 파이프라인에 대한 표지 이미지

집계 개요

Aggregation(집계)은 MongoDB에서 컬렉션 내 여러 문서에 다양한 연산을 수행하는 과정입니다. 파이프라인은 서로 다른 단계들로 구성되며, 한 단계의 출력이 다음 단계의 입력이 됩니다.

집계 파이프라인 유형

$match

문서를 필터링합니다. find() 쿼리와 동일하게 동작하지만 다단계 파이프라인의 한 단계로 사용됩니다.

const channel = await User.aggregate([
  {
    $match: {
      username: username?.toLowerCase()
    }
  },
  // …other stages
]);

$lookup

같은 데이터베이스 내 두 컬렉션 사이에 왼쪽 외부 조인을 수행하여, 외부 컬렉션의 데이터를 로컬 컬렉션의 문서에 병합합니다.

{
  $lookup: {
    from: 'subscriptions',
    localField: '_id',
    foreignField: 'channel',
    as: 'subscribers'
  }
},
{
  $lookup: {
    from: 'subscriptions',
    localField: '_id',
    foreignField: 'subscriber',
    as: 'subscribedTo'
  }
},

$addFields (alias: $set)

새 필드를 추가하거나 기존 필드를 덮어쓰면서 다른 모든 필드는 그대로 유지합니다.

{
  $addFields: {
    subscribersCount: { $size: '$subscribers' },
    channelsSubscribedToCount: { $size: '$subscribedTo' },
    isSubscribed: {
      $cond: {
        if: { $in: [req.user?._id, '$subscribers.subscribers'] },
        then: true,
        else: false
      }
    }
  }
}

$cond는 집계 파이프라인 내에서 if‑then‑else 논리를 구현하는 삼항 연산자입니다.

$project

다음 단계로 전달할 필드를 선택하고, 필드를 새로 만들거나 이름을 바꿀 수도 있습니다.

{
  $project: {
    fullName: 1,
    username: 1,
    subscribersCount: 1,
    channelsSubscribedToCount: 1,
    isSubscribed: 1,
    avatar: 1,
    coverImage: 1,
    email: 1
  }
}

집계 파이프라인 예시

Back to Blog

관련 글

더 보기 »