Docs Menu
Docs Home
/
Atlas
/ /

Atlas SQL 문을 사용한 쿼리

이 페이지에서는 Atlas SQL 쿼리의 예시를 제공합니다. SQL 구문을 사용하여 collection을 쿼리하는 기본 예제와 FLATTENUNWIND 를 사용하여 중첩 데이터로 작업하는 고급 예제를 찾을 수 있습니다.

고급 구성 샘플 연합 데이터베이스 인스턴스 에 대해 다음 Atlas SQL 쿼리를 실행 하거나 자체 데이터를 읽도록 수정하세요.

참고

SELECT * FROM sessions;

Atlas SQL이 Sessions 컬렉션의 모든 문서를 반환합니다.

SELECT * FROM users LIMIT 2;

Atlas SQL이 Users 컬렉션에서 두 개의 문서를 반환합니다.

SELECT * FROM users WHERE name = 'Jon Snow';

Atlas SQL은 사용자의 nameJon SnowUsers 컬렉션에서 문서를 반환합니다.

WITH 키워드를 사용하면 나중에 사용할 수 있도록 파생 데이터 소스를 더 쉽게 만들 수 있습니다.

WITH RecentSales AS (
SELECT customer_id, SUM(amount) AS total_sales
FROM sales
WHERE sale_date > '2025-01-01'
GROUP BY customer_id
)
SELECT customer_id, total_sales
FROM RecentSales
WHERE total_sales > 1000;

Atlas SQL 2025 1월 1 이후에 총 매출이 1000 보다 큰 customer_id 가 있는 Sales 컬렉션 의 문서를 반환합니다.

이 섹션에서는 문서 구조와 더 쉽게 상호 작용할 수 있는 두 가지 Atlas SQL 기능에 대해 설명합니다. 이는 고유한 Atlas SQL 기능입니다.

FLATTEN 반구조화된 데이터(JSON의 이름-값 쌍)를 별도의 열로 평탄화합니다. 필드 이름은 해당 필드의 모든 값을 행에 담는 열 이름이 됩니다.

중첩된 문서를 평면화하는 구문은 FROM 절에서 데이터 원본 및 옵션과 함께 사용할 수 있는 FLATTEN 함수입니다.

SELECT *
FROM FLATTEN(<data source>
WITH DEPTH => <integer>,
SEPARATOR => <string>
)
변수
필요성
설명

<data source>

필수 사항

평면화할 데이터 소스입니다.

DEPTH

옵션

평활화할 하위 문서의 레벨 수를 나타내는 양의 정수입니다. 기본적으로 모든 수준의 하위 문서를 평면화합니다.

SEPARATOR

옵션

필드 이름을 연결할 때 구분 기호로 사용할 string입니다. 기본값은 _입니다.

예시 시나리오에서 customerInfo 컬렉션에는 다음과 같이 구성된 문서가 포함되어 있습니다.

{
id: 1,
location: "New York",
customer: {
age: 50,
email: "customer@email.com",
satisfaction: 5
}
}

SELECT * FROM customerInfo 쿼리를 실행하면 Atlas SQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.

id

1

location

"New York"

customer

{ 연령: 50, 이메일: "customer@email.com", 만족도: 5 }

SELECT * FROM FLATTEN(customerInfo) 쿼리를 실행하면 Atlas SQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.

id

1

location

"New York"

customer_age

50

customer_email

"customer@email.com"

customer_satisfaction

5

FLATTEN을 사용하면 원본 문서의 각 평면화된 필드가 결과 집합의 최상위 필드가 됩니다. 중첩 필드는 상위 필드 이름과 연결되며 기본 구분 기호인 _로 구분됩니다.

UNWIND 입력 데이터 소스에서 배열 필드를 분해하여 해당 배열의 각 항목에 대해 하나의 행을 출력합니다. 언와인드에 대해 자세히 알아보려면 $unwind 애그리게이션 단계 문서를 참조하세요.

배열 필드를 푸는 구문은 FROM 절에서 데이터 소스 및 옵션과 함께 사용할 수 있는 UNWIND 함수입니다.

SELECT *
FROM UNWIND(<data source>
WITH PATH | PATHS => <array_paths>,
INDEX => <identifier>,
OUTER => <bool>
)
변수
필요성
설명

<data source>

필수 사항

풀려는 배열 필드의 소스입니다.

PATH | PATHS

필수 사항

해제할 데이터 소스 의 필드 경로입니다. 괄호를 사용하여 여러 경로를 지정합니다.

INDEX

옵션

이름을 입력하여 인덱스 열을 할당합니다. 생략하면 Atlas SQL에서 인덱스 필드를 만들지 않습니다.

OUTER

옵션

null, 누락 또는 빈 배열 값이 있는 문서의 보존 여부를 나타내는 플래그입니다. true인 경우 null, 누락 또는 빈 배열 값이 있는 문서가 보존됩니다. 기본값은 false입니다.

예시 시나리오에서 customerInfo 컬렉션에는 다음과 같이 구성된 문서가 포함되어 있습니다.

{
id: 1,
location: "New York",
customer: {
age: 50,
email: "customer@email.com",
satisfaction: 5
},
visits: [
{
year: 2020,
score: 10
},
{
year: 2021,
score: 8
},
{
year: 2022
score: 7
}
]
}

SELECT * FROM customerInfo 쿼리를 실행하면 Atlas SQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.

id

1

location

"New York"

customer

{ 연령: 50, 이메일: "customer@email.com", 만족도: 5 }

visits

[ { year: 2020, score: 10 }, { year: 2021, score: 8 }, { year: 2022, score: 7 } ]

SELECT * FROM UNWIND(customerInfo WITH PATH => visits, INDEX => idx) 쿼리를 실행하면 Atlas SQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.

id

1

1

1

location

"New York"

"New York"

"New York"

customer

{ 연령: 50, 이메일: "customer@email.com", 만족도: 5 }

{ 연령: 50, 이메일: "customer@email.com", 만족도: 5 }

{ 연령: 50, 이메일: "customer@email.com", 만족도: 5 }

idx

0

1

2

visits

{ year: 2020, score: 10 }

{ year: 2021, score: 8 }

{ year: 2022, score: 7 }

UNWINDPATH => visits와 함께 사용하면 각 visits 객체가 테이블 행이 됩니다.

예시 시나리오에서 customerInfo 컬렉션에는 다음과 같이 구성된 문서가 포함되어 있습니다.

{
"id": 1,
"location": "New York",
"customer": {
"age": 50,
"email": "customer@email.com",
"satisfaction": 5
},
"visits": [
{
"year": 2020,
"score": 10
},
{
"year": 2021,
"score": 8
},
{
"year": 2022,
"score": 7
}
],
"purchases": [
{
"transaction": "1A",
"transactions": [
{
"amount": 100
},
{
"amount": 150
}
]
},
{
"transaction": "2B",
"transactions": [
{
"amount": 200
}
]
}
]
}

다음 쿼리 실행 가정해 보겠습니다.

SELECT v.year AS visit_year, v.score AS visit_score, p.transaction AS transaction_id, t.amount AS purchase_amount
FROM UNWIND(
customerInfo WITH PATHS => (
visits[INDEX => visit_idx],
purchases[OUTER => TRUE, INDEX => purchase_idx].transactions[]
),
INDEX => idx,
OUTER => FALSE
)

앞의 쿼리 다음을 수행합니다.

  • visits 배열 해제하고 인덱스 이름 visit_idx 을 할당하여 해제된 배열 내부의 인덱스 위치를 추적 .

  • purchases 배열 해제하고 각 purchases 객체 내에서 transactions 배열 해제합니다. 또한 OUTER => TRUE를 사용하여 transactions 배열 누락되거나 비어 있는 모든 구매를 보존합니다.

Atlas SQL 다음 필드가 있는 문서를 반환합니다.

visit_year
visit_score
transaction_id
purchase_amount

2020년

10

1ㅏ

100

2020년

10

2B

150

2021년

8

1ㅏ

100

2021년

8

2B

150

결과에서 각 행에는 단일 visits 항목과 단일 transactions 항목의 데이터가 포함됩니다.

다음 예시는 FLATTENUNWIND 함수를 결합한 것입니다.

예시 시나리오에서 customerInfo 컬렉션에는 다음과 같이 구성된 문서가 포함되어 있습니다.

{
id: 1,
location: "New York",
customer: {
age: 50,
email: "customer@email.com",
satisfaction: 5
},
visits: [
{
year: 2020,
score: 10
},
{
year: 2021,
score: 8
},
{
year: 2022
score: 7
}
]
}

SELECT * FROM customerInfo 쿼리를 실행하면 Atlas SQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.

id

1

location

"New York"

satisfaction

5

customer

{ 연령: 50, 이메일: "customer@email.com", 만족도: 5 }

visits

[ { year: 2020, score: 10 }, { year: 2021, score: 8 }, { year: 2022, score: 7 } ]

Select * from FLATTEN(UNWIND(customerInfo WITH PATH => visits, INDEX => idx)) 쿼리를 실행하면 Atlas SQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.

id

1

1

1

location

"New York"

"New York"

"New York"

satisfaction

5

5

5

customer_age

50

50

50

customer_email

"customer@email.com"

"customer@email.com"

"customer@email.com"

idx

0

1

2

visits_year

2020년

2021년

2022

visits_score

10

8

7

FLATTEN 함수와 UNWIND 함수를 모두 사용하면 visits 배열 이 풀린 다음 결과 문서 가 평면화됩니다.

돌아가기

비공개 엔드포인트

이 페이지의 내용

  • 쿼리 예시
  • SELECT 문
  • LIMIT 문
  • WHERE 문
  • with 키워드
  • FLATTEN 및 UNWIND
  • FLATTEN
  • 평면화 예시
  • Unwind
  • Unwind 예시: 최상위 필드
  • 풀기 예제: 중첩 배열과 형제 배열
  • FLATTEN 및 UNwind 결합 예시