-
MongoDB 튜토리얼 5. AggregationDB/MongoDB 정리 2019. 10. 15. 11:45
https://docs.mongodb.com/manual/aggregation/
Aggregate
Aggregation (집계) 프레임워크
group values from multiple documents together, and perform a variety of operations on the grouped data to return a single result
3가지 유형의 집계 연산 기능 제공 1) 집계 파이프라인 2) 맵-리듀스 함수 3) 단순 목적 집계 메서드
1) 집계 파이프라인
PipeLine?
A | B
A의 결과를 통해 B의 후속처리를 하는 경우 (유닉스)
몽고 디비도 동일하게 aggregation 사용 시 파이프라인을 쓸 수 있다.
A : 1단계에서 처리된 output을 B : 2단계에 input에 넣겠다. 파이프라인은 A, B, C 쭉 연결 가능
집계 연산에 각 단계에는
$project, $match,$group, $unwind 등이 올 수 있다.
$project : 문서에 필드가 여러 개 있는데 최종적으로 문서의 필드 중 보고 싶은 필드만 찍어준다
$match : 조건에 맞는 문서들만 찾는다. 필터링에 맞는 것만 찾으므로 전체 문서의 개수를 줄일 수 있다.
$group : 조건 , 기준 필드를 주고 맞는 그룹을 만드는 것.
$unwind : unwind를 통과하면 문서가 뻥튀기되어서 훨씬 많은 문서들이 나온다.
즉 여러 단계 거쳐 최종 결과 산출
- 각 단계마다 다양한 파이프라인 작업 가능
ex) $project, $group, $match, $limit, $skip, $sort 등
- 각 단계 출력 결과가 다음 단계의 입력으로 제공
db.mycol.aggregate([ { & match:..}, { $ group:.. } , {$ sort:.. } ] )
mycol 컬렉션 - > match 작업 - > group 작업 -> sort 작업 -> 출력 문서
ex )
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
"$by_user" : $를 붙인 문자열 필드 값은 일반 문자열 값이 아닌 입력 문서의 특저 ㅇ필드를 지정
즉 필드 중에 by_user을 찾음.
(
$group -> 입력 문서 by_user 필드를 기준으로 그룹화하고, 그 그룹의 by_user 필드 값은 결과 출력 시 _id 필드 값으로
사용하겠다.
$sum -> 각 그룹에 대해 그룹에 속하는 문서가 있을 때마다 num_tutorial 필드 값을 1씩 증가하겠다
)
SQL:
select by_user as _id, count(*) as num_tutorial
from mycol
group by by_user;
sum 이외도 여러 표현들이 있다.
SQL과 비교?
select $project $group 함수 ( $sum, $min, $avg 등)
from aggregate()
join $unwind
where $match
group by $group
having $match
push와 addToSet은 같다.
$push : 값을 배열에 insert 한다. 결과 문서에 배열 형태로 밀어 넣는다.
$addToSet : $push와 동일하나 배열 요소 값 중복 불가능
$unwind
: wind가 배열로 하나로 묶는 것이라면 배열에 들어있는 요소에 값을 하나씩 꺼내서 푸는 게 unwind이다.
예제 연습 )
https://docs.mongodb.com/manual/tutorial/aggregation-zip-code-data-set/
https://docs.mongodb.com/manual/tutorial/aggregation-with-user-preference-data/
'DB > MongoDB 정리' 카테고리의 다른 글
mongoDB 튜토리얼 7. 샤딩 (0) 2019.11.26 mongoDB 튜토리얼 6. 레플리카 셋 (0) 2019.11.19 MongoDB 튜토리얼 4. CRUD (31) 2019.10.01 MongoDB 튜토리얼 3. CRUD (31) 2019.09.24 MongoDB 튜토리얼 2. CRUD (0) 2019.09.17