반응형

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
반응형

+ Recent posts