MongoDB에서 Aggregation Pipeline이란?
Source: Dev.to

집계 개요
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
}
}
