728x90

✅ Aggregation 이란?
MongoDB의 Aggregation은 여러 문서를 처리해 통계, 분석, 가공된 결과를 만드는 기능으로 데이터를 그룹화하고, 정렬해 다양한 계산을 수행하고, 데이터를 분석하는 등의 목적으로 사용합니다.
기본적으로 Aggregation Pipeline(집계 파이프라인)을 사용하고, 파이프라인은 하나 이상의 "Stage(스테이지)"로 구성되어 있습니다. 각 스테이지는 입력 문서를 받아 일련의 작업을 수행한 후, 결과 문서를 다음 스테이지로 전달합니다.
🤖 사용 문법
Aggregation의 문법에는 기본적으로 선언하는 컬렉션 뒤에 aggregate문을 사용합니다.
db.컬렉션.aggregate([
{ 단계1 },
{ 단계2 },
...
]);
🍎 자주 사용하는 Aggregation 연산자
| $match | 조건에 맞는 문서만 필터링 (WHERE) |
| $group | 그룹화 및 통계 (GROUP BY) |
| $project | 원하는 필드만 추출 (SELECT) |
| $sort | 정렬 (ORDER BY) |
| $limit | 결과 개수 제한 (LIMIT) |
| $skip | 몇 개 건너뛰기 (OFFSET) |
| $count | 개수 세기 |
| $sum | 합계 구하기 |
| $avg | 평균 구하기 |
| $max / $min | 최대 / 최소값 구하기 |
😶🌫️ 사용 예제
users라는 컬렉션안에 새로운 user에 대한 정보를 넣으려면 다음과 같이 작성합니다.
db.users.insertMany([
{ id: 1, name: "Alice", age: 25, city: "New York" },
{ id: 2, name: "Bob", age: 30, city: "Los Angeles" },
{ id: 3, name: "Charlie", age: 35, city: "Chicago" },
{ id: 4, name: "David", age: 28, city: "New York" },
]);
☑️ 1단계: $match -> 조건으로 필터링
먼저 city 가 "New York" 인 문서만 추려줍니다
db.users.aggregate([ { $match: { city: "New York" }}]);
➡️ city(도시)가 "New York"인 문서만 필터링해줍니다.
☑️ 2단계: $group -> 그룹화하고 합계/평균 구하기
db.users.aggregate([
{
$group: {
_id: "$city",
totalAge: { $sum: { $multiply: ["$age", 1] } },
averageAge: { $avg: "$age" },
count: { $sum: 1 },
},
},
]);
하나의 그룹화로 city 별로 묶어 평균 나이와 합계를 구할 수 있습니다.
☑️ 3단계: $sort -> 정렬
// 정렬
db.users.aggregate([
{ $sort: { age: -1 } }, // 나이 내림차순 정렬
{ $sort: { age: 1 } }, // 나이 오름차순 정렬
]);
☑️ 4단계: $project - 특정 필드만 보기
db.users.aggregate([
{
$project: {
name: 1, // name 필드 포함
totalAge: { $sum: ["$age", "$name"] },
_id: 0, // _id 필드 제외
},
},
]);
totalAge와 name만 출력하고 _id 필드는 제외할 수 있습니다.
☑️ 5단계: $limit, $skip
// $limit, $skip
db.users.aggregate([
{ $sort: { age: -1 } }, // 나이 내림차순
{ $skip: 1 }, // 천 벗쨰 문서 건너뛰기
{ $limit: 2 }, // 두 개의 문서만 가져오기
]);
나이를 높은 순으로 정렬 후 첫 번째는 건너뛰고, 다음 2개만 볼 수 있습니다.
GitHub - Koras02/Mongo-Blog: https://thinky.tistory.com/category/Back-End/MongoDB
https://thinky.tistory.com/category/Back-End/MongoDB - Koras02/Mongo-Blog
github.com
728x90
LIST
'Database > MongoDB' 카테고리의 다른 글
| [MongoDB] 8장 배포 (2) | 2025.08.18 |
|---|---|
| [MongoDB] 7장 MongoDB 작업 - 인덱스 + Nodejs 연동 (0) | 2025.08.11 |
| [MongoDB] 5장 클라이언트 도구 설치 (0) | 2025.03.20 |
| [MongoDB] 4장 컬렉션과 데이터베이스 (0) | 2025.03.09 |
| [MongoDB] 3장 Collection Document 집합 (0) | 2025.03.02 |