본문 바로가기
윅스 (Wix) 홈페이지 만들기/윅스 코딩 (Wix Code - Corvid)

윅스 (Wix) 코딩 - 데이터 API 집계 (Wix Code: Working with Aggregations in the Data API)

by 라임쥬서(Lime Juicer) 2020. 5. 7.
반응형

윅스 (Wix) 코딩 - 데이터 API 집계 (Wix Code: Working with Aggregations in the Data API)

 

 

 

설명)

 

Data API의 집계 기능을 사용하여 수집한 데이터를 전체 또는 특정 항목 그룹에 대해 계산하여 의미있는 요약을 검색할 수 있습니다. 집계에 필터링 및 정렬을 추가하여 필요한 것을 정확하게 검색할 수도 있습니다.

 

노트 :

집계는 생성한 컬렉션에서만 사용할 수 있습니다. 그들은 윅스 앱 컬렉션(Wix App Collections)에서 사용할 수 없습니다.

 

노트 :

이 글을 읽기 전에 데이터 API 사용에 익숙해야합니다. 자세한 내용은 데이터 API를 사용한 작업을 참조합니다.

 

 

샘플 데이터 (Sample Data)

데모 목적으로 다음 샘플 데이터를 사용합니다. 이 데이터는 여러해 동안 수집된 도시의 인구 통계를 나타냅니다. 이 예제에서는 데이터가 PopulationData라는 컬렉션에 포함되어 있다고 가정합니다.

 

 

City,          Population, State,  Year

Buffalo,       292000,     NY,     2000

Buffalo,       261000,     NY,     2010

Los Angeles,   3703000,    CA,     2000

Los Angeles,   3796000,    CA,     2010

Miami,         362000,     FL,     2000

Miami,         401000,     FL,     2010

New York,      8015000,    NY,     2000

New York,      8192000,    NY,     2010

Orlando,       195000,     FL,     2000

Orlando,       240000,     FL,     2010

San Diego      1228000,    CA,     2000      

San Diego      1306000,    CA,     2010

San Francisco, 777000,     CA,     2000

San Francisco, 805000,     CA,     2010

 

 

 

 

이 글의 예제를 따라하려면 다음을 수행할 수 있습니다.

1. PopulationData라는 사이트 컬렉션을 만듭니다.

2. 위의 데이터를 .csv 파일에 저장합니다.

3. .csv 파일을 PopulationData 컬렉션으로 가져옵니다.

4. 아래에 있는 코드 스니펫을 복사하여 사이트 페이지 중 하나의 코드 패널에 붙여 넣습니다.

 

 

 

wix-data 가져오기 (Importing wix-data)

집계를 사용하려면 wix-data를 가져와야합니다.

 

import wixData from 'wix-data';

 

 

 

집계 실행 (Running Aggregations)

집계를 실행하는 것은 쿼리 실행과 비슷하지만 몇 가지 중요한 차이점이 있습니다.

 

집계를 실행하려면 다음을 수행합니다.

1. aggregate( ) 함수를 사용하여 집계를 작성합니다.

2. 아래 설명된 기능을 사용하여 집계를 구체화합니다.

3. run( ) 함수를 사용하여 집계를 실행합니다.

4. 집계 결과를 처리합니다.

 

예를 들어 다음은 PopulationData 컬렉션에서 가장 큰 채우기 값을 찾는 간단한 집계입니다.

 

wixData.aggregate("PopulationData")
  .max("population")
  .run()
  .then( (results) => {
    let populationMax = results.items[0].populationMax;
  } );

 

 

또한 수집과 함께 다음 기능을 사용하여 수신한 결과를 수정할 수 있습니다.

- skip( ) - 집계 결과를 반환하기 전에 건너뛸 항목 또는 그룹 수를 설정합니다.

- limit( ) - 집계가 반환하는 항목 또는 그룹의 수를 제한합니다.

- setPageSize( ) - 집계의 페이지 크기를 설정합니다.

 

 

 

집계 결과 (Aggregation Results)

집계 결과를 처리하려면 aggregate() 함수의 프로미스(Promise)에서 반환된 개체에 대해 다음 속성 및 함수를 사용합니다.

- items - 집계 된 항목 또는 그룹의 배열입니다. 각 값은 배열의 요소 인 객체에 포함됩니다. 개체의 구조는 실행 된 집계에 따라 다릅니다.

length - 집계 결과의 항목 또는 그룹 수입니다.

hasNext( ) - 집계에 더 많은 결과가 있는지 여부를 나타냅니다. 집계 결과가 페이지됩니다. 따라서 집계가 페이지 크기보다 많은 결과를 반환하면 여러 페이지의 결과가 표시됩니다.

next( ) - 집계 결과의 다음 페이지를 검색합니다.

 

 

 

 

집계 구조 (Aggregations Structure)

집계는 다음 기본 구조로 구성되며 각 부분은 선택 사항입니다.

 

집계의 일부는 아래의 예를 사용하여 설명합니다. 집계는 2010년 인구가 각 주에서 가장 많고 인구가 1,000,000 명이 넘는 도시를 찾습니다.

 

import wixData from 'wix-data';

// ...

const filter = wixData.filter().eq("year", 2010);
const having = wixData.filter().gt("maxPopulation", 1000000);

wixData.aggregate("PopulationData")
  .filter(filter)
  .group("state")
  .max("population", "maxPopulation")
  .having(having)
  .descending("maxPopulation")
  .run()
  .then( (results) => {
    console.log(results.items);
    console.log(results.length);
    console.log(results.hasNext());
  } )
  .catch( (error) => {
    console.log(error.message);
    console.log(error.code);
  } );

 

 

 

 

filter( )

filter( ) 함수를 사용하여 집계에 포함되는 항목을 좁힙니다.

예를 들어 위의 집계 9행에서 필터는 2010년이 아닌 year를 필터링하는 데 사용됩니다.

집계 filter( ) 함수는 wix-data.filter( ) 함수 (위의 5행)를 사용하여 생성된 WixDataFilter 객체를 사용합니다. WixDataFilter 필터링 함수를 사용하여 WixDataFilter 객체를 작성합니다.

 

 

 

 

group( )

group( ) 함수를 사용하여 검색된 항목을 그룹화한 다음 선택적으로 집계된 값을 계산하고 그룹을 추가로 필터링할 수 있습니다.

그룹화는 전체 컬렉션이나 컬렉션의 일부가 아닌 그룹으로 데이터를 집계할 수 있는 강력한 도구입니다. 그룹화를 사용하면 각 그룹을 정의하는 고유한 조합에 대해 집계가 수행됩니다.

 

예를 들어, 그룹화하지 않으면 컬렉션에서 가장 많은 인구를 가진 도시를 찾을 수 있습니다. 또는 특정 주에서 가장 많은 인구를 가진 도시를 찾을 수 있습니다. 그러나 그룹화를 통해 각 주에서 가장 많은 인구를 가진 도시를 찾을 수 있습니다.

 

예를 들어 위의 집계 중 10번째 줄에서는 그룹화를 사용하여 같은 주에 있는 모든 도시를 그룹화합니다. 그런 다음 11행에서 max( ) 함수를 사용하여 각 상태 그룹에서 가장 큰 채우기 값을 얻습니다.

 

그룹에 대해 다음 집계된 계산을 수행할 수 있습니다.

- min( )

- max( )

- avg( )

- sum( )

- count( )

 

 

group( ) 함수는 여러 입력란(필드)를 기반으로 그룹을 만드는 데에도 사용할 수 있습니다.

 

 

 

 

having( )

having( ) 함수를 사용하여 집계에 포함되는 그룹을 좁힙니다. having( ) 함수는 그룹화된 후에 적용된다는 점에서 필터와 다릅니다. 따라서 filter( ) 는 주어진 기준과 일치하지 않는 그룹을 필터링하는 동안 전혀 고려하지 않으려는 컬렉션의 항목을 필터링합니다.

 

예를 들어, 위의 집계의 12행에서 having 은 maxPopulation이 1000000보다 작거나 같은 그룹을 필터링하는 데 사용됩니다.

having( ) 함수는 wix-data.filter( ) 함수를 사용하여 만든 WixDataFilter 객체를 사용합니다 (위의 6행). WixDataFilter 필터링 함수를 사용하여 WixDataFilter 객체를 작성합니다.

 

 

 

 

정렬 (Sorting)

ascending( ) 및 decending( ) 함수를 사용하여 집계의 결과 항목 또는 그룹을 정렬합니다.

예를 들어, 위의 집계의 13행에서 결과는 집계된 maxPopulation 값을 기준으로 내림차순으로 정렬됩니다.

그룹화 및 집계 프로세스의 일부로 생성된 가상 입력란(필드) 또는 입력란(필드)의 실제 입력란(필드)를 기준으로 정렬할 수 있습니다. 예를 들어, 위 13행의 정렬은 maxPopulation 입력란(필드)에서 수행됩니다.이 입력란(필드)는 컬렉션의 입력란(필드)가 아니라 max( ) 집계에 의해 생성된 입력란(필드)입니다.

 

 

 

 

 

예제들 (Examples)

여기에서는 다양한 방법으로 집계를 사용하는 방법을 보여주는 여러 가지 일반적인 시나리오를 제시합니다.

 

 

 

max( )

이 예제에서는 모든 연도의 모든 도시에서 가장 큰 인구 가치를 찾습니다. max( ) 함수를 호출하고 "population" 입력란(필드) 키를 전달하기 때문에 결과의 키 이름은 "populationMax"입니다.

 

wixData.aggregate("PopulationData")
  .max("population")
  .run()
  .then( (results) => {
    let items = results.items;
  } );

/* items is:
 * [{"_id": "0", "populationMax": 8192000}]
 */

 

 

 

 

group( ), max( )

이 예제에서는 모든 주에서 각 주에서 가장 큰 채우기 값을 찾습니다.

 

wixData.aggregate("PopulationData")
  .group("state")
  .max("population")
  .run()
  .then( (results) => {
    let items = results.items;
  } );

/* items is:
 * [
 *   {"_id": "FL", "populationMax": 401000},
 *   {"_id": "CA", "populationMax": 3796000},
 *   {"_id": "NY", "populationMax": 8192000}
 * ]
 */

 

 

 

group( ), count( )

이 예에서는 모든 주에서 각 주에 대한 항목 수를 찾습니다.

 

wixData.aggregate("PopulationData")
  .group("state")
  .count()
  .run()
  .then( (results) => {
    let items = results.items;
  } );

/* items is:
 * [
 *   {"_id":"FL","count":4},
 *   {"_id":"CA","count":6},
 *   {"_id":"NY","count":4}
 * ]
 */

 

 

 

 

 

 

 

group(...multiple-fields), max( )

여러 입력란(필드)를 기반으로 그룹을 만든 다음 해당 그룹에서 집계를 실행할 수도 있습니다. 여러 입력란(필드)로 그룹화할 때 각 그룹은 그룹의 모든 입력란(필드)의 고유한 조합으로 정의됩니다.

예를 들어 다음은 인구 데이터가있는 매년 각 주에서 가장 큰 인구를 찾는 집계입니다.

 

wixData.aggregate("PopulationData")
  .group("state", "year")
  .max("population")
  .run()
  .then( (results) => {
    let items = results.items;
  } );

/* items is:
 * [
 *   {
 *     "_id": {"state": "NY", "year": 2000},
 *     "populationMax": 8015000,
 *     "state": "NY",
 *     "year": 2000
 *   },{
 *     "_id": {"state": "FL", "year": 2000},
 *     "populationMax": 362000,
 *     "state": "FL",
 *     "year": 2000
 *   },{
 *     "_id": {"state": "CA", "year": 2000},
 *     "populationMax": 3703000,
 *     "state": "CA",
 *     "year": 2000
 *   },{
 *     "_id": {"state": "FL", "year": 2010},
 *     "populationMax": 401000,
 *     "state": "FL",
 *     "year": 2010
 *   },{
 *     "_id": {"state": "CA", "year": 2010},
 *     "populationMax": 3796000,
 *     "state": "CA",
 *     "year": 2010
 *   },{

 *     "_id":{"state": "NY", "year": 2010},
 *     "populationMax": 8192000,
 *     "state": "NY",
 *     "year": 2010
 *   }
 * ]
 */

 

 

 

 

group(...multiple-fields), count( )

이 예제에서는 일년에 각 주에 대한 항목 수를 찾습니다.

 

wixData.aggregate("PopulationData")
  .group("state", "year")
  .count()
  .run()
  .then( (results) => {
    let items = results.items;
  } );

/* items is:
 * [
 *   {
 *     "_id": {"state": "NY", "year": 2000},
 *     "count": 2,
 *     "state": "NY",
 *     "year": 2000
 *   },{
 *     "_id": {"state": "FL", "year": 2000},
 *     "count": 2,
 *     "state": "FL",
 *     "year": 2000
 *   },{
 *     "_id": {"state": "CA", "year": 2000},
 *     "count": 3,
 *     "state": "CA",
 *     "year": 2000
 *   },{
 *     "_id": {"state": "FL", "year": 2010},
 *     "count": 2,
 *     "state": "FL",
 *     "year": 2010
 *   },{
 *     "_id": {"state": "CA", "year": 2010},
 *     "count": 3,
 *     "state": "CA",
 *     "year": 2010
 *   },{

 *     "_id": {"state": "NY", "year": 2010},
 *     "count": 2,
 *     "state": "NY",
 *     "year": 2010
 *   }
 * ]
 */

 

 

 

filter( ), max( )

이 예제에서는 필터를 사용하여 2000년에 인구가 가장 많은 도시를 찾습니다.

 

let filter = wixData.filter().eq("year", 2000);

wixData.aggregate("PopulationData")
  .filter(filter)
  .max("population")
  .run()
  .then( (results) => {
    let items = results.items;
  } );

// items is: [{"_id": "0", "populationMax": 8015000}]

 

 

 

 

 

group( ), max( ), ascending( )

이 예제에서는 정렬을 사용하여 모든 주에서 각 주에서 가장 큰 모집단을 찾고 이를 최소에서 최대로 정렬합니다.

 

wixData.aggregate("PopulationData")
  .group("state")
  .max("population")
  .ascending("populationMax")
  .run()
  .then( (results) => {
    let items = results.items;
  } );

/* items is:
 * [
 *   {"_id": "FL", "populationMax": 401000},
 *   {"_id": "CA", "populationMax": 3796000},
 *   {"_id": "NY", "populationMax": 8192000}
 * ]
 */

 

 

 

 

group( ), max( ), ascending(...multiple-fields)

이 예제에서는 여러 입력란(필드)를 그룹화하고 정렬하여 데이터가 있는 각 연도의 각 주 최대 채우기를 찾습니다. 결과는 1년에 한 번 정렬한 다음 각 연도별로 정렬합니다.

 

 

 

 

 

연관된 토픽)

윅스 (Wix) 코딩 - 데이터 API로 작업하기 (Wix Code: Working with the Data API)

 

 

윅스 홈페이지 만들기 101

윅스 (Wix) 홈페이지 만들기 101 - E-Book - Index

 

윅스 (Wix) 홈페이지 만들기 101 - E-Book - Index

윅스 (Wix) 홈페이지 만들기 101 - E-Book - Index 윅스 (Wix.com) 윅스 ADI & 템플릿 (Wix ADI & 템플릿) 윅스 웹에디터 (Wix Editor) 윅스 코딩 (Wix Code - Corvid) 윅스 해커톤 (Wix Hackathon)

limejuicer.tistory.com

 

출처 :

https://support.wix.com/en/article/wix-code-working-with-aggregations-in-the-data-api

 

반응형

댓글