Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Menu Docs
Página inicial do Docs
/ /

Fazer query com instruções MongoSQL

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.

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 .

SELECT * FROM sessions;

O MongoSQL retorna todos os documentos da collection Sessions.

SELECT * FROM users LIMIT 2;

O MongoSQL retorna dois documentos da collection Users.

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

O MongoSQL retorna documentos da collection Users onde o name do usuário é Jon Snow.

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.

Esta seção aborda dois recursos do MongoSQL que facilitam a interação com estruturas de documento . Eles são exclusivos do MongoSQL.

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.

DEPTH

Opcional

Número inteiro positivo indicando quantos níveis de subdocumentos devem ser nivelados. O padrão é nivelar todos os níveis de subdocumentos.

SEPARATOR

Opcional

Cadeia de caracteres a ser usada como delimitador ao concatenar nomes de campo. O padrão é _.

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:

id

1

location

"Nova York"

customer

{ 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:

id

1

location

"Nova York"

customer_age

50

customer_email

"customer@email.com"

customer_satisfaction

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 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.

PATH | PATHS

Obrigatório

Caminho para o campo na fonte de dados para desenrolar. Use parênteses para especificar vários caminhos.

INDEX

Opcional

Nome para atribuir a coluna de índice. Se omitido, o MongoSQL não cria um campo de índice.

OUTER

Opcional

Sinalizador que indica se os documentos com valores de array nulos, ausentes ou vazios são preservados ou não. Se true, documentos com valores de array nulos, ausentes ou vazios serão preservados. O padrão é false.

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:

id

1

location

"Nova York"

customer

{ age: 50, e-mail: "customer@email.com", satisfação: 5 }

visits

[ { 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:

id

1

1

1

location

"Nova York"

"Nova York"

"Nova York"

customer

{ 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 }

idx

0

1

2

visits

{ 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.

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 visits e atribui um nome de índice visit_idx para acompanhar a posição do índice dentro da array desenrolada. Não inclui visits ausente ou vazio configurando OUTER => FALSE.

  • Desenrola a array purchases e desenrola a array transactions dentro de cada objeto purchases . Ele preserva qualquer array purchases ausente ou vazia usando OUTER => TRUE. Ele também atribui um nome de índice purchase_idx para rastrear a posição do índice dentro da array desenrolada purchases e um nome de índice purchases_transactions_idx para rastrear a posição dentro da array desenrolada transactions dentro de cada objeto purchases.

  • Seleciona os subcampos year e score dos objetos visits, o subcampo transaction dos objetos purchases e o subcampo amount dos objetos transactions dentro de cada objeto purchases, também como todos os campos de índice.

Na query anterior:

  • OUTER => TRUE é definido como um parâmetro de nível superior para a fonte de dados UNWIND, tornando-o o valor padrão usado para todos os PATHS, a menos que o valor OUTER do nível do caminho seja diferente.

  • INDEX => idx é definido como um parâmetro de nível superior para a fonte de dados UNWIND, tornando-o o valor padrão usado para todos os PATHS, a menos que o valor INDEX do nível do caminho seja diferente.

    Por exemplo, transactions não especificou um valor INDEX específico. Portanto, ele usa esse valor de nível superior para criar o nome do índice, anexando _idx ao 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

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:

id

1

location

"Nova York"

satisfaction

5

customer

{ age: 50, e-mail: "customer@email.com", satisfação: 5 }

visits

[ { 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:

id

1

1

1

location

"Nova York"

"Nova York"

"Nova 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

Quando você usa as funções FLATTEN e UNWIND , a array visits é desenrolada e o documento resultante é achatado.

Voltar

Conectar ferramenta de BI

Nesta página