La página ofrece ejemplos de consultas MongoSQL. Encontrará ejemplos básicos que utilizan la sintaxis SQL para consultar colecciones, así como ejemplos más avanzados que utilizan FLATTEN y UNWIND para trabajar con datos anidados.
Consultas de ejemplo
Intente ejecutar las siguientes consultas MongoSQL contra el Ejemplo de configuración avanzada de una instancia de base de datos federada o modifíquela para leer sus propios datos.
Nota
Estos ejemplos utilizan sintaxis de formato corto.
Sentencia SELECT
SELECT * FROM sessions;
MongoSQL devuelve todos los documentos de la colección Sessions.
Declaración LIMIT
SELECT * FROM users LIMIT 2;
MongoSQL devuelve dos documentos de la colección Users.
Declaració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 devuelve documentos de la colección Sales que tienen customer_id con ventas totales mayores a 1000 después del 1 de enero de 2025.
FLATTEN y UNWIND
Esta sección describe dos funciones exclusivas de MongoSQL que facilitan la interacción con las estructuras de documentos.
APLANAR
FLATTEN Aplana los datos semiestructurados (pares nombre-valor en JSON) en columnas separadas. Los nombres de campo se convierten en nombres de columna 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 a aplanar. |
| Opcional | Entero positivo que indica cuántos niveles de subdocumentos se deben aplanar. El valor predeterminado es aplanar todos los niveles de subdocumentos. |
| Opcional | Cadena que se utiliza como delimitador al concatenar nombres de campos. El valor predeterminado es |
Ejemplo de aplanamiento
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:
| 1 |
| "Nueva York" |
| { edad: 50, correo electrónico: "cliente@email.com", satisfacción: 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 |
Al usar FLATTEN, cada campo aplanado del documento original se convierte en un campo de nivel superior en el conjunto de resultados. Los campos anidados se concatenan con sus nombres de campo principal y se separan con el delimitador predeterminado, _.
UNWIND
UNWIND Deconstruye un campo de matriz de la fuente de datos de entrada para generar una fila por cada elemento de esa matriz. Para obtener más información sobre el desenrollado, consulte
Documentación de la etapa de agregación $unwind.
La sintaxis para desenrollar campos de matriz 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 matriz a desenrollar. |
| Requerido | Ruta al campo en la fuente de datos que se va a desenrollar. Use paréntesis para especificar varias rutas. |
| Opcional | Nombre para asignar la columna de índice. Si se omite, MongoSQL no crea un campo de índice. |
| Opcional | Marca que indica si se conservan los documentos con valores de matriz nulos, faltantes o vacíos. Si es |
Ejemplo de desenrollado: campos de nivel superior
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:
| 1 |
| "Nueva York" |
| { edad: 50, correo electrónico: "cliente@email.com", satisfacción: 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" |
| { edad: 50, correo electrónico: "cliente@email.com", satisfacción: 5 } | { edad: 50, correo electrónico: "cliente@email.com", satisfacción: 5 } | { edad: 50, correo electrónico: "cliente@email.com", satisfacción: 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 desenrollado: matrices anidadas y hermanas
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 consulta anterior hace lo siguiente:
Desenrolla la matriz
visitsy asigna un nombre de índicevisit_idxpara rastrear la posición del índice dentro de la matriz desenrollada.Desenrolla la matriz
purchasesy la matriztransactionsdentro de cada objetopurchases. También conserva cualquier compra con una matriztransactionsfaltante o vacía medianteOUTER => 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.
Ejemplo combinado de FLATTEN y UNWIND
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:
| 1 |
| "Nueva York" |
| 5 |
| { edad: 50, correo electrónico: "cliente@email.com", satisfacción: 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 las funciones FLATTEN y UNWIND, la matriz visits se desenrolla y el documento resultante se aplana.