집계 파이프라인 지원
차트 를 렌더링하는 데 필요한 데이터를 가져오기 위해 Charts 는 MongoDB 집계 파이프라인을 만들고 MongoDB database 서버 에서 파이프라인 을 실행합니다. 파이프라인 은 여러 단계로 구성되며, 각 단계는 차트 작성자가 지정한 다양한 설정을 기반으로 생성됩니다.
이 문서 에서는 다양한 차트 빌더 설정을 사용하여 집계 파이프라인을 구성하는 방법을 설명합니다. 오른쪽 상단에 있는 차트 빌더의 줄임표 드롭다운에서 View Aggregation Pipeline 옵션을 선택하여 차트 를 만드는 데 사용된 파이프라인 을 볼 수 있습니다.
Atlas Charts 는 다음 세그먼트로 구성된 파이프라인 을 순서대로 구성합니다.
참고
차트 를 만들 때 이전 차트 세그먼트의 전부는 아니지만 일부를 구성할 수 있습니다. Charts 는 집계 파이프라인 을 생성할 때 지정되지 않은 세그먼트를 건너뜁니다.
예시
다음 차트는 한 사무용품 회사의 총 판매 금액을 구매 방법별로 분류한 것입니다. 데이터 collection의 각 문서는 단일 판매를 나타냅니다.
이 차트를 예로 사용하여 위의 각 설정에 대한 사양이 Atlas Charts에서 생성된 집계 파이프라인을 어떻게 변경하는지 살펴보겠습니다.
인코딩
Data Source 파이프라인, Query 막대 쿼리, 계산된 필드 및 필터를 Filter 창에 추가하지 않은 경우 Atlas Charts는 다음과 같은 집계 파이프라인을 생성합니다.
1 { 2 "$addFields": { // Encoding 3 "__alias_0": { 4 "$sum": "$items.price" 5 } 6 } 7 }, 8 { 9 "$group": { 10 "_id": { 11 "__alias_1": "$purchaseMethod" 12 }, 13 "__alias_0": { 14 "$sum": "$__alias_0" 15 } 16 } 17 }, 18 { 19 "$project": { 20 "_id": 0, 21 "__alias_1": "$_id.__alias_1", 22 "__alias_0": 1 23 } 24 }, 25 { 26 "$project": { 27 "x": "$__alias_1", 28 "y": "$__alias_0", 29 "_id": 0 30 } 31 }, 32 33 { 34 "$addFields": { // Sorting 35 "__agg_sum": { 36 "$sum": [ 37 "$y" 38 ] 39 } 40 } 41 }, 42 { 43 "$sort": { 44 "__agg_sum": -1 45 } 46 }, 47 { 48 "$project": { 49 "__agg_sum": 0 50 } 51 }, 52 { 53 "$limit": 5000 54 }
이 점의 파이프라인은 Encode 패널의 그룹, 기본 정렬 순서 단계, 최대 문서 제한(Atlas Charts에서 5000개로 설정)으로 구성됩니다.
쿼리 추가
아래 쿼리는 saleDate
가 items
배열에 요소가 5개 이상 있고 January 1, 2017
이상이고 이(가) 있는 문서로만 표시되는 문서를 제한합니다. items
은(는) 각 요소가 판매 중에 구매한 품목인 배열입니다.
쿼리:
{ $and: [ { saleDate: { $gte: new Date("2017-01-01") } }, { 'items.4': { $exists: true } } ] }
Query 표시줄에 위 쿼리를 적용하면 다음과 같은 차트와 집계 파이프라인이 생성됩니다.
집계 파이프라인:
1 { 2 "$match": { // Query 3 "$and": [ 4 { 5 "saleDate": { 6 "$gte": { 7 "$date": "2017-01-01T00:00:00Z" 8 } 9 } 10 }, 11 { 12 "items.4": { 13 "$exists": true 14 } 15 } 16 ] 17 } 18 }, 19 { 20 "$addFields": { 21 "__alias_0": { 22 "$sum": "$items.price" 23 } 24 } 25 }, 26 { 27 "$group": { 28 "_id": { 29 "__alias_1": "$purchaseMethod" 30 }, 31 "__alias_0": { 32 "$sum": "$__alias_0" 33 } 34 } 35 }, 36 { 37 "$project": { 38 "_id": 0, 39 "__alias_1": "$_id.__alias_1", 40 "__alias_0": 1 41 } 42 }, 43 { 44 "$project": { 45 "x": "$__alias_1", 46 "y": "$__alias_0", 47 "_id": 0 48 } 49 }, 50 { 51 "$addFields": { 52 "__agg_sum": { 53 "$sum": [ 54 "$y" 55 ] 56 } 57 } 58 }, 59 { 60 "$sort": { 61 "__agg_sum": -1 62 } 63 }, 64 { 65 "$project": { 66 "__agg_sum": 0 67 } 68 }, 69 { 70 "$limit": 5000 71 }
이제 쿼리가 적용된 상태로 집계 파이프라인이 시작되고 Encode 패널과 최대 문서 제한에서 선택한 그룹이 그 뒤를 이습니다.
계산된 필드 추가
생성된 총 수익을 구매 방법별로 분류하여 표시하도록 차트를 변경할 수도 있습니다. 이 작업을 수행하기 위해 가격에 수량을 곱하여 총 수익을 계산하는 계산된 필드를 생성하겠습니다. 위의 쿼리에 이 새 계산된 필드를 추가하면 다음과 같은 차트와 파이프라인이 생성됩니다.
계산된 필드 표현식:
집계 파이프라인:
1 { 2 "$match": { 3 "$and": [ 4 { 5 "saleDate": { 6 "$gte": { 7 "$date": "2017-01-01T00:00:00Z" 8 } 9 } 10 }, 11 { 12 "items.4": { 13 "$exists": true 14 } 15 } 16 ] 17 } 18 }, 19 { 20 "$addFields": { // Calculated Field 21 "revenue": { 22 "$reduce": { 23 "input": "$items", 24 "initialValue": 0, 25 "in": { 26 "$sum": [ 27 "$$value", 28 { 29 "$multiply": [ 30 "$$this.price", 31 "$$this.quantity" 32 ] 33 } 34 ] 35 } 36 } 37 } 38 } 39 }, 40 { 41 "$group": { 42 "_id": { 43 "__alias_0": "$purchaseMethod" 44 }, 45 "__alias_1": { 46 "$sum": "$revenue" 47 } 48 } 49 }, 50 { 51 "$project": { 52 "_id": 0, 53 "__alias_0": "$_id.__alias_0", 54 "__alias_1": 1 55 } 56 }, 57 { 58 "$project": { 59 "x": "$__alias_0", 60 "y": "$__alias_1", 61 "_id": 0 62 } 63 }, 64 { 65 "$addFields": { 66 "__agg_sum": { 67 "$sum": [ 68 "$y" 69 ] 70 } 71 } 72 }, 73 { 74 "$sort": { 75 "__agg_sum": -1 76 } 77 }, 78 { 79 "$project": { 80 "__agg_sum": 0 81 } 82 }, 83 { 84 "$limit": 5000 85 }
이제 업데이트된 파이프라인의 Query 표시줄에 적용된 쿼리 바로 아래에 계산된 필드가 포함되며 나머지 구성 요소의 순서는 변경되지 않습니다.
필터 추가하기
이 차트는 뉴욕 위치에서 이루어진 매장 판매만 선택하도록 Filter 창에 필터를 추가하여 더욱 세분화할 수 있습니다. 이 필터를 추가하면 다음과 같은 차트와 집계 파이프라인이 생성됩니다.
집계 파이프라인:
1 { 2 "$match": { 3 "$and": [ 4 { 5 "saleDate": { 6 "$gte": { 7 "$date": "2017-01-01T00:00:00Z" 8 } 9 } 10 }, 11 { 12 "items.4": { 13 "$exists": true 14 } 15 } 16 ] 17 } 18 }, 19 { 20 "$addFields": { 21 "revenue": { 22 "$reduce": { 23 "input": "$items", 24 "initialValue": 0, 25 "in": { 26 "$sum": [ 27 "$$value", 28 { 29 "$multiply": [ 30 "$$this.price", 31 "$$this.quantity" 32 ] 33 } 34 ] 35 } 36 } 37 } 38 } 39 }, 40 { 41 "$match": { // Filter 42 "storeLocation": { 43 "$in": [ 44 "New York" 45 ] 46 } 47 } 48 }, 49 { 50 "$group": { 51 "_id": { 52 "__alias_0": "$purchaseMethod" 53 }, 54 "__alias_1": { 55 "$sum": "$revenue" 56 } 57 } 58 }, 59 { 60 "$project": { 61 "_id": 0, 62 "__alias_0": "$_id.__alias_0", 63 "__alias_1": 1 64 } 65 }, 66 { 67 "$project": { 68 "x": "$__alias_0", 69 "y": "$__alias_1", 70 "_id": 0 71 } 72 }, 73 { 74 "$addFields": { 75 "__agg_sum": { 76 "$sum": [ 77 "$y" 78 ] 79 } 80 } 81 }, 82 { 83 "$sort": { 84 "__agg_sum": -1 85 } 86 }, 87 { 88 "$project": { 89 "__agg_sum": 0 90 } 91 }, 92 { 93 "$limit": 5000 94 }
이제 파이프라인은 계산된 필드 바로 아래에 storeLocation
필터를 포함하며 나머지 구성 요소의 순서는 변경되지 않습니다.