Fazer query com instruções Atlas SQL
Nesta página
A página fornece exemplos de query Atlas SQL. Você encontrará exemplos básicos que usam a SQL sintaxe para query collection, bem como exemplos mais avançados que usam FLATTEN
e UNWIND
para trabalhar com dados aninhados.
Exemplos de queries
Tente executar as seguintes queries do Atlas SQL na instância de banco de instância do banco de dados federado de exemplode Configuraçã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 Atlas SQL retorna todos os documentos da collection Sessions
.
Declaração LIMIT
SELECT * FROM users LIMIT 2;
O Atlas SQL retorna dois documentos da collection Users
.
Declaração ONDE
SELECT * FROM users WHERE name = 'Jon Snow';
O Atlas SQL retorna documentos da collection Users
onde o name
do usuário é Jon Snow
.
NIVELAR e DESENROLAR
Esta seção aborda duas funcionalidades do Atlas SQL que facilitam a interação com estruturas de documentos. Elas são exclusivas do Atlas SQL.
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 Atlas SQL 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 Atlas SQL 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 => <array_path>, 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 descompactar. |
| Opcional | Nome para atribuir a coluna do índice. Se omitido, o Atlas SQL 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 desenrolar
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 Atlas SQL 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 Atlas SQL 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 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 Atlas SQL 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 Atlas SQL 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.