| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- dml
- SubQuery
- springboot
- MySQL
- 탄력적 ip
- Github Actions
- 정보처리기사
- db
- VPC
- NoSQL
- aws
- DevOps
- PostgreSQL
- redis
- Join
- Transaction
- sub-query
- SQL
- 정처기
- database
- 정규화
- CTE
- ASW
- DDL
- databse
- index
- mongoDB
- SQLite
- 보안 그룹
- EC2
Archives
- Today
- Total
sellen
MongoDB - Aggregation 본문

💡 NomadCoder - SQL 마스터클래스 강의를 듣고 정리한 글입니다.
아래의 링크에 SQL 학습에 필요한 데이터가 존재합니다.
https://nomadcoders.co/sql-masterclass
SQL 마스터클래스 – 노마드 코더 Nomad Coders
SQL을 정복하기 위한 단 하나의 강의
nomadcoders.co
💡 Aggregation에는 매우 많은 연산자가 존재하지만 몇 개만 다룰 예정입니다.
이전 글에서 설명했다시피 MongoDB를 직접 사용하진 않습니다.
대강 이런 함수가 있다 정도로 보시면 됩니다.
아래의 링크를 통해 MongoDB의 사용 방법을 익힐 수 있습니다.
MongoDB 란 무엇인가요? - 데이터베이스 매뉴얼 - MongoDB Docs
MongoDB 란 무엇인가요? - 데이터베이스 매뉴얼 - MongoDB Docs
MongoDB Atlas UI에서 무료 클러스터, 자동 확장 클러스터 또는 서버리스 인스턴스를 생성하세요. 자세한 내용은 MongoDB Atlas 문서의 클러스터 유형 선택을 참조하세요.자체 호스팅 배포서버의 경우
www.mongodb.com
Aggregation
관계형 DB의 GROUP BY 절과 동일한 작업을 수행합니다.
db.movies.aggregate([
// {집계 연산자 : 출력한 Key 이름} 를 묶어서 Stage 라고 부른다.
{집계 연산자 : 출력한 Key 이름},
{집계 연산자 : 출력한 Key 이름},
...
])
$count
db.movies.aggregate([
{$count: "total_movies"}
])
$group
_id는 데이터의 ObjectId를 의미하는 것이 아니라 그룹화할 기준이 되는 Key를 의미한다.
db.movies.aggregate([
-- 전체를 묶어서 평점 평균을 출력
{$group: {_id: null, avgRating: {$avg: "$rating"}}}
])
최근 영화와 가장 오래된 영화 연도 출력
db.movies.aggregate([
{$group : {
_id: null,
oldestMovie: {$min: "$year"},
newestMovie: {$max: "$year"}
}}
])
연도별 평균 상영 시간 출력
db.movies.aggregate([
{$group : {
_id: "$year",
avgDuration: {$avg: "$duration"}
}},
{$sort: { _id: -1}}
])
영화배우 별 출연 작품 개수 출력
db.movies.aggregate([
{$unwind:'$cast'},
{$group : {
_id: "$cast",
movieCount: {$sum: 1}
}},
{$sort: { movieCount: -1}}
])
$match
$match를 통해 HAVING 절처럼 그룹화할 때 조건을 추가할 수 있다.
-- director가 존재하는 데이터 중에서 감독별로 제작한 영화 개수 출력
db.movies.aggregate([
{$match: {director: {$exists: true}}},
{$group : {
_id: "$director",
movieCount: {$sum: 1}
}},
{$sort: { movieCount: -1}}
])
$unwind
PostgreSQL의 unnest처럼 리스트의 여러 개의 데이터를 분리할 수 있다.
db.movies.aggregate([
{$unwind: "$genres"},
{$group : {
_id: "$genres", -- genre를 기준으로 그룹화
count: { $sum: 1} -- 그룹의 데이터 개수 만큼 1씩 증가
}},
{$sort: {count: -1}} -- count를 기준으로 정렬
])
$project
$project를 통해 원하는 key만 출력할 수 있다.
-- title, director, cast만 출력
db.movies.aggregate([
{
$project: {
title: 1,
director: 1,
cast: 1,
_id: 0 -- ObjectId는 출력되지 않도록 설정
}
},
{$limit: 10}
])
'DataBase > NoSQL' 카테고리의 다른 글
| Redis - String, List (1) | 2025.07.23 |
|---|---|
| Redis 설치 (3) | 2025.07.23 |
| MongoDB CRUD - 2 (1) | 2025.07.23 |
| MongoDB CRUD - 1 (0) | 2025.07.23 |
| MongoDB 설치 (0) | 2025.07.23 |