MongoDB Aggregate 파이프라인

2025. 2. 25. 10:12·DataBase/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 파이프라인을 효과적으로 사용하면 복잡한 데이터 분석과 처리를 효율적으로 수행할 수 있습니다.

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

'DataBase > MongoDB' 카테고리의 다른 글

MongoDB 프로젝션(Projection)  (0) 2025.02.15
Windows에서 Linux로 MongoDB 마이그레이션 하기  (0) 2025.01.19
MongoDB 쿼리 작성법과 최적화  (3) 2024.12.03
'DataBase/MongoDB' 카테고리의 다른 글
  • MongoDB 프로젝션(Projection)
  • Windows에서 Linux로 MongoDB 마이그레이션 하기
  • MongoDB 쿼리 작성법과 최적화
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (730)
      • 스마트팜 (1)
      • 상품 추천 (223)
      • DataBase (0)
        • MongoDB (4)
        • PostgreSQL (0)
      • 하드웨어 (19)
      • 일기장 (4)
      • 파이썬 (131)
        • Basic (42)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (5)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • 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)
  • 인기 글

  • 태그

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

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

티스토리툴바