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

Query con instrucciones MongoSQL

La página proporciona ejemplos de consultas MongoSQL. Encontrarás ejemplos básicos que usan la sintaxis de SQL para query colecciones, así como otros más avanzados que usan FLATTEN y UNWIND para trabajar con datos anidados.

Intenta ejecutar las siguientes consultas MongoSQL en el/la Configuración avanzada de la instancia federada de base de datos de muestra, o modifícalos para leer tus propios datos.

Nota

Estos ejemplos utilizan la sintaxis de formato corto.

SELECT * FROM sessions;

MongoSQL devuelve todos los documentos de la colección Sessions.

SELECT * FROM users LIMIT 2;

MongoSQL devuelve dos documentos de la colección Users.

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

MongoSQL devuelve documentos de la colección Users donde el name del usuario es Jon Snow.

La palabra clave WITH facilita la creación de fuentes de datos derivadas para su uso posterior.

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;

MongoSQL retorna documentos de la colección Sales que tienen customer_id con ventas totales superiores a 1000 después del 1 de enero de 2025.

Esta sección cubre dos capacidades de MongoSQL que facilitan la interacción con las estructuras de documentos. Estas son exclusivas de MongoSQL.

FLATTEN aplana los datos semiestructurados (pares de nombre y valor en JSON) en columnas separadas. Los nombres de los campos se convierten en nombres de columnas que contienen todos los valores de ese campo en filas.

La sintaxis para aplanar documentos anidados es una función FLATTEN que se puede utilizar en la cláusula FROM junto con una fuente de datos y opciones.

SELECT *
FROM FLATTEN(<data source>
WITH DEPTH => <integer>,
SEPARATOR => <string>
)
Variable
Necesidad
Descripción

<data source>

Requerido

Fuente de datos para aplanar.

DEPTH

Opcional

Un número entero positivo que indica cuántos niveles de subdocumentos se deben aplastar. Por defecto, aplana cada nivel de subdocumentos.

SEPARATOR

Opcional

String para usar como delimitador al concatenar nombres de campos. Por defecto, es _.

En un escenario de ejemplo, una colección customerInfo contiene documentos que están estructurados de la siguiente manera:

{
id: 1,
location: "New York",
customer: {
age: 50,
email: "customer@email.com",
satisfaction: 5
}
}

Si ejecutas la query SELECT * FROM customerInfo, MongoSQL devuelve documentos con los siguientes campos de nivel superior:

id

1

location

"Nueva York"

customer

{ edad: 50, correo electrónico: "customer@email.com", satisfacción: 5 }

Si ejecutas la query SELECT * FROM FLATTEN(customerInfo), MongoSQL devuelve documentos con los siguientes campos de nivel superior:

id

1

location

"Nueva York"

customer_age

50

customer_email

"customer@email.com"

customer_satisfaction

5

Cuando utilizas FLATTEN, cada campo aplanado del documento original se convierte en un campo de primer nivel en el conjunto de resultados. Los campos anidados se concatenan con los nombres de campo principal y se separan mediante el delimitador por defecto, _.

UNWIND descompone un campo de arreglo de la fuente de datos de entrada para generar una fila para cada elemento de ese arreglo. Para aprender más información sobre el desenrollado, consulta la Documentación de la etapa de agregación $unwind.

La sintaxis para descomprimir campos de arreglo es una función UNWIND que se puede utilizar en la cláusula FROM junto con una fuente de datos y opciones.

SELECT *
FROM UNWIND(<data source>
WITH PATH | PATHS => <array_paths>,
INDEX => <identifier>,
OUTER => <bool>
)
Variable
Necesidad
Descripción

<data source>

Requerido

Fuente del campo de arreglo que se debe descomponer.

PATH | PATHS

Requerido

Ruta al campo en la fuente de datos que se va a desenrollar. Use paréntesis para especificar varias rutas.

INDEX

Opcional

Nombre para asignar a la columna de índice. Si se omite, MongoSQL no crea un campo de índice.

OUTER

Opcional

Indicador que indica si los documentos con valores nulos, faltantes o arreglos vacíos se conservan. Si true, los documentos con valores nulos, inexistentes o arreglos vacíos se conservan. Por defecto, es false.

En un escenario de ejemplo, una colección customerInfo contiene documentos que están estructurados de la siguiente manera:

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

Si ejecutas la query SELECT * FROM customerInfo, MongoSQL devuelve documentos con los siguientes campos de nivel superior:

id

1

location

"Nueva York"

customer

{ edad: 50, correo electrónico: "customer@email.com", satisfacción: 5 }

visits

[ { año: 2020, puntuación: 10 }, { año: 2021, puntuación: 8 }, { año: 2022, puntuación: 7 } ]

Si ejecutas la query SELECT * FROM UNWIND(customerInfo WITH PATH => visits, INDEX => idx), MongoSQL devuelve documentos con los siguientes campos de nivel superior:

id

1

1

1

location

"Nueva York"

"Nueva York"

"Nueva York"

customer

{ edad: 50, correo electrónico: "customer@email.com", satisfacción: 5 }

{ edad: 50, correo electrónico: "customer@email.com", satisfacción: 5 }

{ edad: 50, correo electrónico: "customer@email.com", satisfacción: 5 }

idx

0

1

2

visits

{ año: 2020, puntuación: 10 }

{ año: 2021, puntuación: 8 }

{ año: 2022, puntuación: 7 }

Cuando usas UNWIND con PATH => visits, cada objeto visits se convierte en una fila de tabla.

En un escenario de ejemplo, una colección customerInfo contiene documentos que están estructurados de la siguiente manera:

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

Supongamos que ejecuta la siguiente consulta:

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
)

La query anterior realiza lo siguiente:

  • Desenrolla la matriz visits y asigna un nombre de índice visit_idx para rastrear la posición del índice dentro de la matriz desenrollada.

  • Desenrolla el arreglo purchases y desenrolla el arreglo transactions dentro de cada objeto purchases. También conserva cualquier compra con un arreglo transactions vacío o faltante utilizando OUTER => TRUE.

MongoSQL devuelve documentos con los siguientes 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

En los resultados, cada fila contiene datos de una única entrada visits y una única entrada transactions.

El siguiente ejemplo combina las funciones FLATTEN y UNWIND.

En un escenario de ejemplo, una colección customerInfo contiene documentos que están estructurados de la siguiente manera:

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

Si ejecutas la query SELECT * FROM customerInfo, MongoSQL devuelve documentos con los siguientes campos de nivel superior:

id

1

location

"Nueva York"

satisfaction

5

customer

{ edad: 50, correo electrónico: "customer@email.com", satisfacción: 5 }

visits

[ { año: 2020, puntuación: 10 }, { año: 2021, puntuación: 8 }, { año: 2022, puntuación: 7 } ]

Si ejecutas la query Select * from FLATTEN(UNWIND(customerInfo WITH PATH => visits, INDEX => idx)), MongoSQL devuelve documentos con los siguientes campos de nivel superior:

id

1

1

1

location

"Nueva York"

"Nueva York"

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

Cuando se utilizan ambas funciones FLATTEN y UNWIND, el visits arreglo se desenrolla y el documento resultante se aplana.

Volver

Conectar herramienta BI

En esta página