집계 프레임워크
공유하기:
집계 프레임워크
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를 파이프라인 앞부분에 배치하세요.