이 페이지에서는 MongoSQL 쿼리 예시를 제공합니다. 기본 예시에서는 SQL 구문을 사용하여 컬렉션을 쿼리하고, 더 고급 예시에서는 FLATTEN 및 UNWIND를 사용하여 중첩된 데이터로 작업합니다.
MongoDB는 SQL IDE를 제공하지 않습니다. DBeaver, Tableau, Power BI와 같은 선호하는 SQL 도구에서 이러한 쿼리를 실행하세요. SQL 도구를 연결하는 방법을 알아보려면 SQL 도구를 MongoDB에 연결을 참조하세요.
쿼리 예시
자신의 데이터에 대해 다음 MongoSQL 쿼리를 실행해 보세요. SQL 연결을 허용하도록 배포서버를 구성하려면 SQL 인터페이스 서버 설정을 참조하세요.
SELECT 문
SELECT * FROM sessions;MongoSQL은 Sessions 컬렉션 의 모든 문서를 반환합니다.
LIMIT 문
SELECT * FROM users LIMIT 2;MongoSQL은 Users 컬렉션 에서 두 개의 문서를 반환합니다.
WHERE 문
SELECT * FROM users WHERE name = 'Jon Snow';MongoSQL은 사용자의 name 가 Jon Snow인 Users 컬렉션 에서 문서를 반환합니다.
with 키워드
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_salesFROM RecentSalesWHERE total_sales > 1000;MongoSQL은 1 2025 이후에 총 매출이 1000 이상인 Sales 컬렉션의 문서를 customer_id 반환합니다.
FLATTEN 및 UNWIND
이 섹션에서는 문서 구조와 더 쉽게 상호 작용 작용할 수 있는 두 가지 MongoSQL 기능에 대해 설명합니다. 이는 MongoSQL에만 있는 기능입니다.
FLATTEN
FLATTEN 반구조화된 데이터(JSON의 이름-값 쌍)를 별도의 열로 평탄화합니다. 필드 이름은 해당 필드의 모든 값을 행에 담는 열 이름이 됩니다.
중첩된 문서를 평면화하는 구문은 FROM 절에서 데이터 소스 및 옵션과 함께 사용할 수 있는 FLATTEN 함수입니다.
SELECT *FROM FLATTEN(<data source> WITH DEPTH => <integer>, SEPARATOR => <string>)변수 | 필요성 | 설명 |
|---|---|---|
<data source> | 필수 사항 | 평면화할 데이터 소스입니다. |
| 옵션 | 평활화할 하위 문서의 레벨 수를 나타내는 양의 정수입니다. 기본적으로 모든 수준의 하위 문서를 평면화합니다. |
| 옵션 | 필드 이름을 연결할 때 구분 기호로 사용할 string입니다. 기본값은 |
평면화 예시
예시 시나리오에서 customerInfo 컬렉션에는 다음과 같이 구성된 문서가 포함되어 있습니다.
{ id: 1, location: "New York", customer: { age: 50, email: "customer@email.com", satisfaction: 5 }}SELECT * FROM customerInfo 쿼리 실행 하면 MongoSQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.
| 1 |
| "New York" |
| { age: 50, email: "customer@email.com", satisfaction: 5 } |
SELECT * FROM FLATTEN(customerInfo) 쿼리 실행 하면 MongoSQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.
| 1 |
| "New York" |
| 50 |
| |
| 5 |
FLATTEN을 사용하면 원본 문서의 각 평면화된 필드가 결과 집합의 최상위 필드가 됩니다. 중첩 필드는 상위 필드 이름과 연결되며 기본 구분 기호인 _로 구분됩니다.
Unwind
UNWIND 입력 데이터 소스에서 배열 필드를 분해해 해당 배열의 각 항목에 대해 하나의 행을 출력합니다. 해제에 대해 자세히 알아보려면 $unwind 집계 단계 설명서를 참조하세요.
배열 필드를 푸는 구문은 FROM 절에서 데이터 소스 및 옵션과 함께 사용할 수 있는 UNWIND 함수입니다.
SELECT *FROM UNWIND(<data source> WITH PATH | PATHS => <array_paths>, INDEX => <identifier>, OUTER => <bool>)변수 | 필요성 | 설명 |
|---|---|---|
<data source> | 필수 사항 | 풀려는 배열 필드의 소스입니다. |
| 필수 사항 | 해제할 데이터 소스 의 필드 경로입니다. 괄호를 사용하여 여러 경로를 지정합니다. |
| 옵션 | 인덱스 열을 할당할 이름입니다. 생략하면 MongoSQL은 인덱스 필드 생성하지 않습니다. |
| 옵션 | null, 누락 또는 빈 배열 값이 있는 문서의 보존 여부를 나타내는 플래그입니다. |
Unwind 예시: 최상위 필드
예시 시나리오에서 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 쿼리 실행 하면 MongoSQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.
| 1 |
| "New York" |
| { age: 50, email: "customer@email.com", satisfaction: 5 } |
| [ { year: 2020, score: 10 }, { year: 2021, score: 8 }, { year: 2022, score: 7 } ] |
SELECT * FROM UNWIND(customerInfo WITH PATH => visits, INDEX => idx) 쿼리 실행 하면 MongoSQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.
| 1 | 1 | 1 |
| "New York" | "New York" | "New York" |
| { age: 50, email: "customer@email.com", satisfaction: 5 } | { age: 50, email: "customer@email.com", satisfaction: 5 } | { age: 50, email: "customer@email.com", satisfaction: 5 } |
| 0 | 1 | 2 |
| { year: 2020, score: 10 } | { year: 2021, score: 8 } | { year: 2022, score: 7 } |
UNWIND를 PATH => 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 visits.year AS visit_year, visits.score AS visit_score, purchases.transaction AS transaction_id, purchases.transactions.amount AS purchase_amount, visit_idx, purchase_idx, purchases_transactions_idx AS transaction_idxFROM UNWIND( customerInfo WITH PATHS => ( visits[OUTER => FALSE, INDEX => visit_idx], purchases[INDEX => purchase_idx].transactions[OUTER => FALSE] ), INDEX => idx, OUTER => TRUE)앞의 쿼리 다음을 수행합니다.
visits배열 해제하고 인덱스 이름visit_idx을 할당하여 해제된 배열 내부의 인덱스 위치를 추적 합니다.OUTER => FALSE를 설정하여 누락되거나 비어 있는visits는 포함되지 않습니다.purchases배열 해제하고 각purchases객체 내에서transactions배열 해제합니다.OUTER => TRUE를 사용하여 누락되거나 빈purchases배열 보존합니다. 또한 풀린purchases배열 내부의 인덱스 위치를 추적 위해 인덱스 이름purchase_idx을 할당하고, 각purchases객체 내부에서 풀린transactions배열 내부의 위치를 추적 하기 위해 인덱스 이름purchases_transactions_idx을 할당합니다.각
purchases객체 내의visits객체에서year및score하위 필드를,purchases객체에서transaction하위 필드를,transactions객체에서amount하위 필드를 선택하고 모든 인덱스 필드를 선택합니다.
이전 쿼리 에서 다음을 수행합니다.
OUTER => TRUEUNWIND데이터 소스에 대한 최상위 매개 변수로 설정하다 경로 수준OUTER값이 다른 경우를 제외하고 모든PATHS에 대해 기본값 이 사용됩니다.INDEX => idxUNWIND데이터 소스에 대한 최상위 매개 변수로 설정하다 경로 수준INDEX값이 다른 경우를 제외하고 모든PATHS에 대해 기본값 이 사용됩니다.예시 들어
transactions이(가) 특정INDEX값을 지정하지 않았습니다. 따라서 이 최상위 값을 사용하여 전체 경로에_idx를 추가하여 인덱스 이름을 생성합니다.
MongoSQL은 다음 필드가 있는 문서를 반환합니다.
visit_year | visit_score | transaction_id | purchase_amount | visit_idx | purchase_idx | transaction_idx |
|---|---|---|---|---|---|---|
2020년 | 10 | 1A | 100 | 0 | 0 | 0 |
2020년 | 10 | 1A | 150 | 0 | 0 | 1 |
2020년 | 10 | 2B | 200 | 0 | 1 | 0 |
2021년 | 8 | 1A | 100 | 1 | 0 | 0 |
2021년 | 8 | 1A | 150 | 1 | 0 | 1 |
2021년 | 8 | 2B | 200 | 1 | 1 | 0 |
2022 | 7 | 1A | 100 | 2 | 0 | 0 |
2022 | 7 | 1A | 150 | 2 | 0 | 1 |
2022 | 7 | 2B | 200 | 2 | 1 | 0 |
FLATTEN 및 UNwind 결합 예시
다음 예시는 FLATTEN 및 UNWIND 함수를 결합한 것입니다.
예시 시나리오에서 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 쿼리 실행 하면 MongoSQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.
| 1 |
| "New York" |
| 5 |
| { age: 50, email: "customer@email.com", satisfaction: 5 } |
| [ { year: 2020, score: 10 }, { year: 2021, score: 8 }, { year: 2022, score: 7 } ] |
Select * from FLATTEN(UNWIND(customerInfo WITH PATH => visits, INDEX => idx)) 쿼리 실행 하면 MongoSQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.
| 1 | 1 | 1 |
| "New York" | "New York" | "New York" |
| 5 | 5 | 5 |
| 50 | 50 | 50 |
| |||
| 0 | 1 | 2 |
| 2020년 | 2021년 | 2022 |
| 10 | 8 | 7 |
FLATTEN 함수와 UNWIND 함수를 모두 사용하면 visits 배열 이 풀린 다음 결과 문서 가 평면화됩니다.