Aggregation Framework: 데이터를 파이프라인에 따라 처리할 수 있는 강력한 프레임워크.
Aggregation Framework는 MongoDB에서 데이터를 쿼리하는 가장 간단한 방법 중 하나입니다.
MQL을 사용하는 모든 쿼리는 Aggregation Framework에서도 할 수 있습니다.
Amenities 중 하나로 wifi가 포함되어 있는 도큐먼트를 찾아
price, address 필드만 Projection하는 쿼리를 작성한다면,
db.listingsAndReviews.find(
Query { "amenities" : "Wifi" },
Projection { "price" : 1, "address" : 1, "_id" : 0 } ).pretty()
db.listingsAndReviews.aggregate( [
Query { $match: { "amenities" : "Wifi" } },
Projection { $project : { "price" : 1, "address" : 1, "_id" : 0 } }
] ).pretty()
MQL: find 명령을 사용하여 쿼리와 Projection을 한다.
Aggregation Framework: aggregate 명령을 사용한다.
aggregate를 사용하면 도큐먼트를 필터링하지 않고 그룹으로 데이터를 집계하거나 데어터를 수정할 수 있습니다.
aggregate를 사용하면 데이터 찾기 및 프로젝션 없이 작업을 수행하거나 계산할 수 있습니다.
aggregate를 사용할 땐 대괄호를 이용해 배열을 인자로 사용합니다.
이는 파이프라인처럼 배열 요소의 순서대로 작업을 하기 때문입니다.
Aggregation Framework에서는 파이프라인의 단계에 따라 데이터를 처리할 수 있습니다.
Aggregation Framework는 파이프라인처럼 작동합니다.
각각의 처리 작업은 우리가 나열한 배열의 순서에 의해 결정합니다.
마지막으로 변환한 데이터가 파이프라인의 끝에 나타납니다.
다음 단계의 필터가 더 자세한 필터여야 한다.
match 등과 같은 필터링 단계가 없으면 데이터 요약, 계산 및 그룹화를 수행할 때 원본 데이터를 수정하지 않는다는 점을 유의해야 합니다.
필터링 단계가 있다면 이를 통과한 데이터를 다음 단계에서 작업합니다.
$group Syntax
listingsAndReviews 컬렉션에서 숙소가 있는 국가와 국가 당 위치한 숙소의 총계 목록을 가져오는 쿼리를 작성한다면, $group을 사용하여 기준에 따라 그룹화할 수 있습니다.
{ $group :
{
_id : , // 표현식을 기준으로 그룹화
<field 1> : {<accumulator 1> : <expression 1>},
... } }
$group 단계
1. 이전 단계에서 도큐먼트를 받을 때 _id 필드에 표현식을 사용하여 이 도큐먼트가 속한 그룹을 식별합니다.
2. $group 구문의 두 번째 부분을 사용하면 파이프라인을 통해 들어오는 데이터에 대해 더 많은 양적 분석을 수행할 수 있습니다.
db.listingsAndReviews.aggregate( [
{ project : { "address" : 1, "_id" : 0 } }, { $group : { _id : "address.country",
"count" : { "$sum" : 1 } } }
] )
파이프라인의 각 단계 순서대로 데이터가 처리됩니다.
이 안의 데이터는 원본데이터를 수정하거나 변경하지 않습니다.
각 단계의 이름 앞에는 <stage 1>) 그 뒤에는 실행할 작업에 대한 설명 ( : ) 이 옵니다.