자바스크립트를 허용해주세요.
[ 자바스크립트 활성화 방법 ]
from Mohon Aktifkan Javascript!
 

[MongoDB] 6장 MongoDB 작업 - Aggregation

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 필드 제외
    },
  },
]);

 

totalAgename만 출력하고 _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