반응형
1. Aggregation(집계)
- 집계 연산 : group values from multiple documents together, and perform a variety of operations on the grouped data to return a single result
- 집계 작업은 데이터 레코드를 처리하고 계산 된 결과를 반환
- 집계 작업은 여러 문서의 값을 함께 그룹화하고 그룹화 된 데이터에 대해 다양한 작업을 수행하여 단일 결과를 반환 할 수 있다.
- 3가지 유형의 집계 연산 기능 제공
- 집계 파이프라인
- 맵-리듀스 함수
- 단순 목적 집계 메소드
Aggregation 프레임워크
- 집계 파이프라인
- 여러 단계를 거쳐 최종 결과 산출
- 각 단계 마다 다양한 파이프라인 작업 가능
- ex) $project , $group , $match, $limit, $skip, $sort , 등 10개 연산자
- 각 단계의 출력 결과가 다음 단계의 입력으로 제공
- 문서를 여러 단계의 파이프 라인으로 처리해, 데이터를 처리/집계 한다고 이해
- 각 단계 마다 다양한 파이프라인 작업 가능
- 집계 프레임워크에서 사용 문법
- $project : 컬렉션에서 특정 필드를 선택하는데 사용
- $match : 필터링 작업 / 다음 단계에 입력으로 제공되는 문서의 양 줄임
- $group : 위에서 설명한 실제 집계 수행
- $sort : 문서 정렬
- $skip : 주어진 양의 문서에 대한 문서 목록에서 건너 뛸 수 있음
- $limit : 현재 위치에서 시작하여 주어진 숫자로 볼 문서의 양 제한
- $unwind : 배열을 사용하는 문서 되 감는데 사용 / 배열을 사용할 때는 데이터가 미리 결합 되어 있으며 , 이를 통해 작업을 취소하여 개별 문서를 다시 가질 수 있음
-> 다음 단계의 문서 양을 늘림 - 정의
- 여러 단계를 거쳐 최종 결과 산출
db.컬렉션명.aggregate([<작업1>, . . . <작업n>])
db.mycol.aggregate([{$match:..}, {$group:..}, {$sort:..}])
//<작업n>은 문서 형식 {키 : 값} 으로 명세
mycol 컬렉션 -> $match 작업 -> $group 작업 -> $sort 작업 -> 출력 문서
1.
2.
3. 최종
> db.mycol.aggregate([{$match:{by_user:“Neo4j”}}, { $unwind : “$tags”}, {$project:{“_id:0”, “title”:1, “tags”:1}} ])
{“title”:“Neo4j Overview”, “tags”:“neo4j”}
{“title”:“Neo4j Overview”, “tags”:“database”}
{“title”:“Neo4j Overview”, “tags”:“NoSQL”}
- SQL과의 비교(SQL count(*) 에서 group by 는 mongodb 집계와 동일)
select | $project, $group 함수($sum, $min, $avg 등) |
from | aggregate() |
join | $unwind |
where | $match |
group by | $group |
having | $match |
- aggregation 표현식 목록
> db.mycol.aggregate([ {$group : { _id : "$by_user“ , num_tutorial : {$sum : 1} }} ])
//출력될 문서의 형식 { _id : 값1, num_tutorial : 값2 }
//$가 붙은 문자열 필드 값은 일반 문자열 값이 아닌 입력 문서의 특정 필드를 지정
> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
{
"result" : [
{
"_id" : "tutorials point",
"num_tutorial" : 2
},
{ "_id" : "Neo4j",
"num_tutorial" : 1
}
], "ok" : 1
}//각 사용자가 작성한 자습서 수 나타내는 목록
- $sum
-> 각 그룹에 대해 그 그룹에 속하는 문서가 있을 때 마다 num_tutorial 필드 값을 1씩 증가 - $avg
-> 컬렉션의 모든 문서에서 제공된 모든 값의 평균 계산 - $min
-> 컬렉션의 모든 문서에서 해당 값의 최소값 가져옴 - $max
-> 컬렉션의 모든 문서에서 해당 값의 최대값 가져옴 - $push
-> 결과 문서의 배열에 값 삽입 - $addToSet
-> 결과 문서의 배열에 값을 삽입하지만 중복은 생성하지 않는다 - $first
-> 그룹화에 따라 소스 문서에서 첫 번째 문서를 가져옴 / 이전에 적용된 일부 "$sort" 단계와 만 의미 O - $last
-> 그룹화에 따라 소스 문서에서 마지막 문서를 가져옴 / 이전에 적용된 일부 "$sort" 단계와 만 의미 O
반응형
'Database Study > MongoDB' 카테고리의 다른 글
[Mongodb]웹서비스컴퓨팅_10주차 (0) | 2019.12.03 |
---|---|
[Mongodb]웹서비스컴퓨팅_9주차 (0) | 2019.12.03 |
[Mongodb]웹서비스컴퓨팅_6주차 (0) | 2019.10.01 |
[Mongodb]웹서비스컴퓨팅_5주차 (0) | 2019.09.24 |
[Mongodb]웹서비스컴퓨팅_4주차 (0) | 2019.09.17 |