MongoDB Aggregate 파이프라인

2025. 2. 25. 10:12·MongoDB
반응형

MongoDB의 aggregate 파이프라인은 데이터를 처리하고 분석하는 강력한 도구입니다. 데이터를 단계별로 처리하여 원하는 결과를 얻을 수 있습니다.

기본 구조

db.collection.aggregate([
    { $match: { /* 조건 */ } },
    { $group: { /* 그룹화 */ } },
    { $sort: { /* 정렬 */ } }
])

$match: 데이터 필터링

// 가격이 1000 이상인 상품 필터링
db.products.aggregate([
    {
        $match: {
            price: { $gte: 1000 },
            category: "electronics"
        }
    }
])

$group: 데이터 그룹화

// 카테고리별 평균 가격 계산
db.products.aggregate([
    {
        $group: {
            _id: "$category",
            avgPrice: { $avg: "$price" },
            totalProducts: { $sum: 1 },
            maxPrice: { $max: "$price" }
        }
    }
])

$project: 필드 선택 및 변형

// 필요한 필드만 선택하고 변형
db.orders.aggregate([
    {
        $project: {
            _id: 0,
            orderDate: 1,
            totalAmount: "$amount",
            customerName: {
                $concat: ["$firstName", " ", "$lastName"]
            }
        }
    }
])

$unwind: 배열 펼치기

// 주문의 상품 배열을 개별 문서로 변환
db.orders.aggregate([
    {
        $unwind: "$items"
    },
    {
        $project: {
            productId: "$items.productId",
            quantity: "$items.quantity",
            orderDate: 1
        }
    }
])

$lookup: 컬렉션 조인

// 주문과 사용자 정보 조인
db.orders.aggregate([
    {
        $lookup: {
            from: "users",
            localField: "userId",
            foreignField: "_id",
            as: "userDetails"
        }
    },
    {
        $unwind: "$userDetails"
    }
])

복잡한 집계 예시

// 월별, 카테고리별 판매 분석
db.sales.aggregate([
    // 날짜 조건 필터링
    {
        $match: {
            date: {
                $gte: ISODate("2024-01-01"),
                $lt: ISODate("2025-01-01")
            }
        }
    },
    // 월별로 그룹화
    {
        $group: {
            _id: {
                month: { $month: "$date" },
                category: "$category"
            },
            totalSales: { $sum: "$amount" },
            count: { $sum: 1 }
        }
    },
    // 결과 정렬
    {
        $sort: {
            "_id.month": 1,
            "totalSales": -1
        }
    }
])

고급 집계 기능

// 누적 합계 계산
db.transactions.aggregate([
    {
        $sort: { date: 1 }
    },
    {
        $group: {
            _id: "$userId",
            transactions: {
                $push: {
                    amount: "$amount",
                    date: "$date"
                }
            },
            runningTotal: {
                $sum: "$amount"
            }
        }
    }
])

// 윈도우 함수 사용
db.sales.aggregate([
    {
        $setWindowFields: {
            partitionBy: "$region",
            sortBy: { date: 1 },
            output: {
                movingAvg: {
                    $avg: "$amount",
                    window: {
                        range: [-2, 0],
                        unit: "month"
                    }
                }
            }
        }
    }
])

 

주요 포인트

  1. 파이프라인 최적화
    • $match를 가능한 일찍 사용
    • 불필요한 필드는 일찍 제거
    • 인덱스 활용
  2. 메모리 사용량 관리
    • 대용량 데이터 처리 시 $limit 사용
    • allowDiskUse 옵션 고려
    • 적절한 배치 크기 설정
  3. 성능 고려사항
    • 인덱스 활용 확인
    • 캐싱 전략 수립
    • 실행 계획 분석
  4. 데이터 정확성
    • null 값 처리
    • 타입 변환 주의
    • 날짜 처리 시 시간대 고려

MongoDB의 aggregate 파이프라인을 효과적으로 사용하면 복잡한 데이터 분석과 처리를 효율적으로 수행할 수 있습니다.

저작자표시 비영리 변경금지 (새창열림)

'MongoDB' 카테고리의 다른 글

MongoDB 프로젝션(Projection)  (0) 2025.02.15
Windows에서 Linux로 MongoDB 마이그레이션 하기  (0) 2025.01.19
MongoDB 쿼리 작성법과 최적화  (2) 2024.12.03
'MongoDB' 카테고리의 다른 글
  • MongoDB 프로젝션(Projection)
  • Windows에서 Linux로 MongoDB 마이그레이션 하기
  • MongoDB 쿼리 작성법과 최적화
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
  • 전체
    오늘
    어제
    • 분류 전체보기 (513) N
      • 상품 추천 (33) N
      • MongoDB (4)
      • 하드웨어 (1) N
      • 일기장 (4)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • 파이썬 (127)
        • Basic (40)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (48)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 다비즈
  • 공지사항

  • 인기 글

  • 태그

    스마트스토어리뷰
    learntocode
    appdevelopment
    devlife
    codingtips
    unity
    상품 리뷰 크롤링
    programmerlife
    C#
    list
    Python
    rtsp
    cv2
    programming101
    파이썬
    셀레니움
    쇼핑몰리뷰
    리뷰이관
    유니티
    codingcommunity
    카페24리뷰이관
    믈레코비타멸균우유
    스크립트 실행 순서
    리스트
    라떼우유
    긴유통기한우유
    카페24리뷰
    ipcamera
    스크립트 실행
    리뷰관리
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
MongoDB Aggregate 파이프라인
상단으로

티스토리툴바