집계 프레임워크

70_Lecture/MongoDB
공유하기:

집계 프레임워크

1. 집계 파이프라인 (Aggregation Pipeline) 개요

여러 단계(Stage)를 거쳐 데이터를 필터링, 그룹화 및 변환하는 강력한 엔진입니다.

주요 파이프라인 단계 (Stages)

  • $match: 쿼리 조건으로 문서를 필터링. 전체 성능을 위해 파이프라인 초기에 배치하는 것이 좋음.
  • $group: 특정 키를 기준으로 문서를 그룹화하고 누계 작업 수행.
  • $project: 출력 문서의 구성을 재정의 (필드 추가, 제거, 변환).
  • $sort: 지정된 필드로 문서 정렬.
  • $limit / $skip: 결과 수 제한 및 건너뛰기.
  • $lookup: 다른 컬렉션과의 좌측 외부 조인(Left Outer Join) 수행.
  • $unwind: 배열 필드를 개별 문서로 펼침.

2. 누산기 (Accumulators)

$group 단계에서 주로 사용됩니다.

  • $sum: 합계 계산.
  • $avg: 평균 계산.
  • $min / $max: 최소/최대값 확인.
  • $push: 그룹 내 값을 배열에 추가.

3. 실습 명령어

// 나이별 사용자 수 집계
db.users.aggregate([
  { $match: { status: "active" } },
  { $group: { _id: "$age", count: { $sum: 1 } } },
  { $sort: { count: -1 } }
])
 
// 주문 내역과 상품 정보 조인
db.orders.aggregate([
  {
    $lookup: {
      from: "products",
      localField: "product_id",
      foreignField: "_id",
      as: "product_details"
    }
  }
])

4. 시험 팁 (Certification Tips)

  • $match 단계가 인덱스를 타려면 반드시 파이프라인의 첫 단계에 와야 합니다.
  • $group 단계의 메모리 제한(기본 100MB)을 기억하세요. 이를 초과할 경우 allowDiskUse: true 옵션이 필요합니다.
  • $facet을 사용하여 단일 파이프라인 내에서 다중 집계를 수행할 수 있습니다.

5. 베스트 프랙티스

  • 분석 쿼리를 작성할 때 불필요한 필드는 초기에 $project로 제거하여 메모리 효율을 높이세요.
  • 가능하면 인덱스를 활용할 수 있도록 $match$sort를 파이프라인 앞부분에 배치하세요.