A página fornece exemplo de queries MongoSQL. Exemplos básicos usam sintaxe SQL para consultar collections, e mais avançados usam FLATTEN e UNWIND para trabalhar com dados aninhados.
O MongoDB não fornece um SQL IDE. Execute essas queries a partir da ferramenta SQL de sua preferência, como DBeaver, Tableau ou Power BI. Para saber como conectar uma ferramenta SQL, consulte Conectar sua ferramenta SQL ao MongoDB.
Exemplos de queries
Tente executar as seguintes queries MongoSQL em seus próprios dados. Para configurar um sistema para aceitar primeiro conexões SQL, consulte Configuração do servidor de interface SQL.
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 você pode usar na cláusula FROM 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" |
| 50idade:, e-mail: "cliente@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 |
| |
| 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 desenrolar campos de array é uma função UNWIND que você pode usar na cláusula FROM 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" |
| 50idade:, e-mail: "cliente@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" |
| 50idade:, e-mail: "cliente@email.com", satisfação: 5 } | 50idade:, e-mail: "cliente@email.com", satisfação: 5 } | 50idade:, e-mail: "cliente@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 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_idx FROM UNWIND( customerInfo WITH PATHS => ( visits[OUTER => FALSE, INDEX => visit_idx], purchases[INDEX => purchase_idx].transactions[OUTER => FALSE] ), INDEX => idx, OUTER => TRUE )
A query anterior faz o seguinte:
Desenrola a array
visitse atribui um nome de índicevisit_idxpara acompanhar a posição do índice dentro da array desenrolada. Não incluivisitsausente ou vazio configurandoOUTER => FALSE.Desenrola a array
purchasese desenrola a arraytransactionsdentro de cada objetopurchases. Ele preserva qualquer arraypurchasesausente ou vazia usandoOUTER => TRUE. Ele também atribui um nome de índicepurchase_idxpara rastrear a posição do índice dentro da array desenroladapurchasese um nome de índicepurchases_transactions_idxpara rastrear a posição dentro da array desenroladatransactionsdentro de cada objetopurchases.Seleciona os subcampos
yearescoredos objetosvisits, o subcampotransactiondos objetospurchasese o subcampoamountdos objetostransactionsdentro de cada objetopurchases, e todos os campos de índice.
Na query anterior:
OUTER => TRUEé definido como um parâmetro de nível superior para a fonte de dadosUNWIND, tornando-o o valor padrão usado para todos osPATHS, a menos que o valorOUTERdo nível do caminho seja diferente.INDEX => idxé definido como um parâmetro de nível superior para a fonte de dadosUNWIND, tornando-o o valor padrão usado para todos osPATHS, a menos que o valorINDEXdo nível do caminho seja diferente.Por exemplo,
transactionsnão especificou um valorINDEXespecífico. Portanto, ele usa esse valor de nível superior para criar o nome do índice, anexando_idxao caminho completo.
O MongoSQL retorna documentos com os seguintes campos:
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 |
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 |
| 50idade:, e-mail: "cliente@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 |
| |||
| 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.