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.
Ejemplos de query
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.
Instrucción SELECT
SELECT * FROM sessions;
MongoSQL devuelve todos los documentos de la colección Sessions.
Instrucción LIMIT
SELECT * FROM users LIMIT 2;
MongoSQL devuelve dos documentos de la colección Users.
Instrucción WHERE
SELECT * FROM users WHERE name = 'Jon Snow';
MongoSQL devuelve documentos de la colección Users donde el name del usuario es Jon Snow.
CON palabra clave
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.
FLATTEN y UNWIND
Esta sección cubre dos capacidades de MongoSQL que facilitan la interacción con las estructuras de documentos. Estas son exclusivas de MongoSQL.
APLANAR
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 puede ser usada 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. |
| Opcional | Un número entero positivo que indica cuántos niveles de subdocumentos se deben aplastar. Por defecto, aplana cada nivel de subdocumentos. |
| Opcional | String para usar como delimitador al concatenar nombres de campos. Por defecto, es |
Ejemplo de aplanamiento
En un escenario a modo de ejemplo, una colección de customerInfo contiene documentos 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:
| 1 |
| "Nueva York" |
| { age: 50, email: "customer@email.com", satisfaction: 5 } |
Si ejecutas la query SELECT * FROM FLATTEN(customerInfo), MongoSQL devuelve documentos con los siguientes campos de nivel superior:
| 1 |
| "Nueva York" |
| 50 |
| "customer@email.com" |
| 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
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
$unwind documentación de la etapa de agregación.
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. |
| Requerido | Ruta al campo en la fuente de datos que se desglosará. Utiliza paréntesis para especificar varias rutas. |
| Opcional | Nombre para asignar a la columna de índice. Si se omite, MongoSQL no crea un campo de índice. |
| Opcional | Indicador que indica si los documentos con valores nulos, faltantes o arreglos vacíos se conservan. Si |
Ejemplo de desenrollar: campos de nivel superior
En un escenario a modo de ejemplo, una colección de customerInfo contiene documentos 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:
| 1 |
| "Nueva York" |
| { age: 50, email: "customer@email.com", satisfaction: 5 } |
| [ { 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:
| 1 | 1 | 1 |
| "Nueva York" | "Nueva York" | "Nueva York" |
| { age: 50, email: "customer@email.com", satisfaction: 5 } | { age: 50, email: "customer@email.com", satisfaction: 5 } | { age: 50, email: "customer@email.com", satisfaction: 5 } |
| 0 | 1 | 2 |
| { 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.
Ejemplo de Unwind: Arreglos Anidados y Hermanos
En un escenario a modo de ejemplo, una colección de customerInfo contiene documentos 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 } ] } ] }
Supón que ejecutas la siguiente 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 )
La query anterior realiza lo siguiente:
Desenrolla el arreglo
visitsy asigna un nombre de índicevisit_idxpara rastrear la posición del índice dentro del arreglo desenrollado. No incluye valores faltantes o vacíos devisitsal establecerOUTER => FALSE.Desenrolla el arreglo
purchasesy desenrolla el arreglotransactionsdentro de cada objetopurchases. Conserva cualquierpurchasesarreglo faltante o vacío utilizandoOUTER => TRUE. También asigna un nombre de índicepurchase_idxpara rastrear la posición del índice dentro del arreglo desenrolladopurchases, y un nombre de índicepurchases_transactions_idxpara rastrear la posición dentro del arreglo desenrolladotransactionsdentro de cada objetopurchases.Selecciona los subcampos
yearyscorede los objetosvisits, el subcampotransactionde los objetospurchasesy el subcampoamountde los objetostransactionsdentro de cada objetopurchases, así como todos los campos de índice.
En la consulta anterior:
OUTER => TRUEse configura como un parámetro de nivel superior en el origen de datosUNWIND, convirtiéndose en el valor predeterminado utilizado para todos losPATHS, a menos que el valorOUTERa nivel de ruta sea diferente.INDEX => idxse configura como un parámetro de nivel superior en el origen de datosUNWIND, convirtiéndose en el valor predeterminado utilizado para todos losPATHS, a menos que el valorINDEXa nivel de ruta sea diferente.Por ejemplo,
transactionsno especificó un valor específico deINDEX. Por lo tanto, utiliza este valor de nivel superior para crear el nombre del índice añadiendo_idxa la ruta completa.
MongoSQL devuelve documentos con los siguientes 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 |
Ejemplo combinado de FLATTEN y UNWIND
El siguiente ejemplo combina las funciones FLATTEN y UNWIND.
En un escenario a modo de ejemplo, una colección de customerInfo contiene documentos 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:
| 1 |
| "Nueva York" |
| 5 |
| { age: 50, email: "customer@email.com", satisfaction: 5 } |
| [ { 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:
| 1 | 1 | 1 |
| "Nueva York" | "Nueva York" | "Nueva 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 |
Cuando se utilizan ambas funciones FLATTEN y UNWIND, el visits arreglo se desenrolla y el documento resultante se aplana.