A página fornece exemplo de queries MongoSQL. Você encontrará exemplos básicos que utilizam a sintaxe SQL para queries de coleções, bem como mais avançados que utilizam FLATTEN
e UNWIND
para trabalhar com dados aninhados.
Exemplos de queries
Tente executar as seguintes queries MongoSQL na instância do banco de dados federado do exemplo deConfiguração avançada ou modifique-as para ler seus próprios dados.
Observação
Esses exemplos usam sintaxe de formato curto .
Declaração SELECT
SELECT * FROM sessions;
O MongoSQL retorna todos os documentos da collection Sessions
.
Declaração LIMIT
SELECT * FROM users LIMIT 2;
O MongoSQL retorna dois documentos da collection Users
.
Declaração ONDE
SELECT * FROM users WHERE name = 'Jon Snow';
O MongoSQL retorna documentos da collection Users
onde o name
do usuário é Jon Snow
.
Com palavra-chave
A palavra-chave WITH
facilita a criação de fontes de dados derivadas para uso subsequente.
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;
O MongoSQL retorna documentos da collection Sales
que tenham customer_id
com vendas totais maiores que 1000 depois de 1 de janeiro de 2025.
NIVELAR e DESENROLAR
Esta seção aborda dois recursos do MongoSQL que facilitam a interação com estruturas de documento . Eles são exclusivos do MongoSQL.
achatar
FLATTEN
nivela os dados semiestruturados (pares de nome-valor em formato JSON) em colunas separadas. Os nomes de campo se tornam nomes de coluna que contêm todos os valores desse campo em linhas.
A sintaxe para nivelar documentos aninhados é uma função FLATTEN
que pode ser usada na cláusula FROM
em conjunto com uma fonte de dados e opções.
SELECT * FROM FLATTEN(<data source> WITH DEPTH => <integer>, SEPARATOR => <string> )
Variável | necessidade | Descrição |
---|---|---|
<data source> | Obrigatório | Fonte de dados a ser nivelada. |
| Opcional | Número inteiro positivo indicando quantos níveis de subdocumentos devem ser nivelados. O padrão é nivelar todos os níveis de subdocumentos. |
| Opcional | Cadeia de caracteres a ser usada como delimitador ao concatenar nomes de campo. O padrão é |
Exemplo de nivelamento
Em um cenário de exemplo, uma coleção customerInfo
contém documentos estruturados da seguinte maneira:
{ id: 1, location: "New York", customer: { age: 50, email: "customer@email.com", satisfaction: 5 } }
Se você executar a query SELECT * FROM customerInfo
, o MongoSQL retornará documentos com os seguintes campos de nível superior:
| 1 |
| "Nova York" |
| { age: 50, e-mail: "customer@email.com", satisfação: 5 } |
Se você executar a query SELECT * FROM FLATTEN(customerInfo)
, o MongoSQL retornará documentos com os seguintes campos de nível superior:
| 1 |
| "Nova York" |
| 50 |
| "customer@email.com" |
| 5 |
Quando você usa FLATTEN
, cada campo nivelado do documento original se torna um campo de nível superior no conjunto de resultados. Os campos aninhados são concatenados com seus nomes de campo pai e separados pelo delimitador padrão, _
.
Unwind
UNWIND
desconstrói um campo de array da fonte de dados de entrada para gerar uma linha de saída para cada item nessa array. Para saber mais sobre unwind, consulte a documentação do estágio de agregação $unwind .
A sintaxe para descompactar campos de array é uma função UNWIND
que pode ser usada na cláusula FROM
em conjunto com uma fonte de dados e opções.
SELECT * FROM UNWIND(<data source> WITH PATH | PATHS => <array_paths>, INDEX => <identifier>, OUTER => <bool> )
Variável | necessidade | Descrição |
---|---|---|
<data source> | Obrigatório | Fonte do campo de array a ser descompactado. |
| Obrigatório | Caminho para o campo na fonte de dados para desenrolar. Use parênteses para especificar vários caminhos. |
| Opcional | Nome para atribuir a coluna de índice. Se omitido, o MongoSQL não cria um campo de índice. |
| Opcional | Sinalizador que indica se os documentos com valores de array nulos, ausentes ou vazios são preservados ou não. Se |
Exemplo de desenrolamento: campos de nível superior
Em um cenário de exemplo, uma coleção customerInfo
contém documentos estruturados da seguinte maneira:
{ 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 } ] }
Se você executar a query SELECT * FROM customerInfo
, o MongoSQL retornará documentos com os seguintes campos de nível superior:
| 1 |
| "Nova York" |
| { age: 50, e-mail: "customer@email.com", satisfação: 5 } |
| [ { ano: 2020, pontuação: 10 }, { ano: 2021, pontuação: 8 }, { ano: 2022, pontuação: 7 } ] |
Se você executar a query SELECT * FROM UNWIND(customerInfo WITH PATH => visits, INDEX => idx)
, o MongoSQL retornará documentos com os seguintes campos de nível superior:
| 1 | 1 | 1 |
| "Nova York" | "Nova York" | "Nova York" |
| { age: 50, e-mail: "customer@email.com", satisfação: 5 } | { age: 50, e-mail: "customer@email.com", satisfação: 5 } | { age: 50, e-mail: "customer@email.com", satisfação: 5 } |
| 0 | 1 | 2 |
| { year: 2020, score: 10 } | { year: 2021, score: 8 } | { year: 2022, score: 7 } |
Quando você usa UNWIND
com PATH => visits
, cada objeto visits
se torna uma linha da tabela.
Exemplo de desenrolamento: arrays aninhadas e irmanadas
Em um cenário de exemplo, uma coleção customerInfo
contém documentos estruturados da seguinte maneira:
{ "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 } ] } ] }
Suponha que você execute a seguinte query:
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 )
A query anterior faz o seguinte:
Desenrola a array
visits
e atribui um nome de índicevisit_idx
para rastrear a posição do índice dentro da array desenrolada.Desenrola a array
purchases
e desenrola a arraytransactions
dentro de cada objetopurchases
. Ele também preserva qualquer compra com uma arraytransactions
ausente ou vazia usandoOUTER => TRUE
.
O MongoSQL retorna documentos com os seguintes campos:
visit_year | visit_score | transaction_id | purchase_amount |
---|---|---|---|
2020 | 10 | 1A | 100 |
2020 | 10 | 2B | 150 |
2021 | 8 | 1A | 100 |
2021 | 8 | 2B | 150 |
Nos resultados, cada linha contém dados de uma única entrada visits
e uma única entrada transactions
.
Exemplo combinado de FLATTEN e UNwindd
O exemplo a seguir combina as funções FLATTEN
e UNWIND
.
Em um cenário de exemplo, uma coleção customerInfo
contém documentos estruturados da seguinte maneira:
{ 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 } ] }
Se você executar a query SELECT * FROM customerInfo
, o MongoSQL retornará documentos com os seguintes campos de nível superior:
| 1 |
| "Nova York" |
| 5 |
| { age: 50, e-mail: "customer@email.com", satisfação: 5 } |
| [ { ano: 2020, pontuação: 10 }, { ano: 2021, pontuação: 8 }, { ano: 2022, pontuação: 7 } ] |
Se você executar a query Select * from FLATTEN(UNWIND(customerInfo WITH PATH => visits, INDEX => idx))
, o MongoSQL retornará documentos com os seguintes campos de nível superior:
| 1 | 1 | 1 |
| "Nova York" | "Nova York" | "Nova York" |
| 5 | 5 | 5 |
| 50 | 50 | 50 |
| "customer@email.com" | "customer@email.com" | "customer@email.com" |
| 0 | 1 | 2 |
| 2020 | 2021 | 2022 |
| 10 | 8 | 7 |
Quando você usa as funções FLATTEN
e UNWIND
, a array visits
é desenrolada e o documento resultante é achatado.