Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

Referencia del lenguaje MongoSQL

Esta página describe la sintaxis y semántica de MongoSQL, un dialecto de SQL que utiliza la Interfaz SQL para recuperar SQL de los usuarios o herramientas para luego traducir esas instrucciones a MQL (lenguaje de consulta de MongoDB). Esta página enumera y describe las cláusulas, operadores, expresiones y funciones admitidas.

  • MongoSQL se basa en el estándar SQL-92. Sin embargo, MongoSQL no es totalmente compatible con SQL-92 debido a las siguientes limitaciones:

    • El tipo de datos date no es compatible. Utilice timestamp en su lugar.

    • La aritmética de intervalos y de intervalos de fechas no está soportada.

  • MongoSQL no es compatible con MongoDB Vector Search y MongoDB Search.

Los tipos de datos de MongoSQL son el conjunto de BSON types. Todos estos tipos pueden consultarse en MongoSQL. Ellos son:

  • String (STRING)

  • Documento (DOCUMENT)

  • Arreglo (ARRAY)

  • BinData (BINDATA)

  • ObjectId (OBJECTID)

  • Booleano (BOOL)

  • Fecha (TIMESTAMP)

  • Nulo (NULL)

  • Regex (REGEX)

  • entero de 32 bits (INT)

  • double (DOUBLE)

  • Long (LONG)

  • Sello de tiempo (BSON_TIMESTAMP)

  • Decimal (DECIMAL)

  • MinKey (MINKEY)

  • MaxKey (MAXKEY)

  • DBPointer (DBPOINTER)

  • Símbolo (SYMBOL)

  • Javascript con alcance (JAVASCRIPTWITHSCOPE)

  • JavaScript (JAVASCRIPT)

Cada tipo en MongoSQL tiene un nombre (entre paréntesis arriba), que es una palabra clave que se puede utilizar para referirse al tipo cuando sea necesario, como en una expresión como CAST.

Las conversiones de tipos explícitas se expresan a través de la función CAST o del operador ::. Todos los tipos numéricos son mutuamente comparables; MongoSQL permite operaciones entre los diversos tipos numéricos sin necesidad de convertir los operandos al mismo tipo numérico.

MongoSQL convierte los valores flexibles de documentos de MongoDB en tipos utilizando un esquema. Un esquema de MongoSQL es un conjunto de hechos sobre una expresión o colección que se sabe que son verdaderos en tiempo de compilación.

Por ejemplo, un esquema MongoSQL puede dictar que una expresión sea un booleano o un documento con subcampos, o que una expresión sea un arreglo con una longitud de uno o un entero positivo.

Si no se cumple una restricción de tipo estático, la consulta no se compilará.

La gestión de esquemas difiere entre la herramienta manual on-premises y la herramienta automatizada Atlas.

Las consultas de MongoSQL admiten un conjunto básico de cláusulas SQL. Las cláusulas disponibles son:

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
OFFSET
LIMIT

SELECT begins every Atlas SQL query. MongoSQL permite que SELECT VALUE y SELECT VALUES se utilicen de manera intercambiable.

MongoSQL requiere que las instrucciones anidadas SELECT tengan un alias.

SELECT foo FROM (SELECT bar FROM baz) as subSelect

Utiliza SELECT DISTINCT para excluir filas duplicadas del conjunto de resultados. La comprobación de duplicados sigue la semántica de igualdad de MongoDB, donde el orden de los campos importa para la comparación de documentos y tanto el orden como el valor de los elementos importan para la comparación de arreglos.

SELECT DISTINCT bar FROM baz

MongoSQL admite la función CAST(), que le permite convertir dinámicamente los valores de su query en un tipo de dato dado.

SELECT * FROM table WHERE period_start_utc >= CAST('2023-01-01T00:00:00.000Z' AS TIMESTAMP)

FROM es la primera cláusula evaluada en cada query de MongoSQL.

FROM puede extraer datos de varias fuentes, incluyendo colecciones (SELECT * FROM foo), arreglos (SELECT * FROM [{'a': 1}]), uniones (SELECT * FROM a JOIN b), tablas derivadas (SELECT * FROM (SELECT a FROM foo) d) y FLATTEN y UNWIND.

La cláusula WHERE es un filtro para los datos entrantes. Su expresión debe tener estáticamente el tipo BOOL o NULL y puede evaluarse como MISSING.

GROUP BY proporciona un medio para agrupar y agregar datos.

GROUP BY Las claves pueden ser campos de nivel superior o subcampos. Si agrupa por subcampos, estos deben tener alias en la cláusula SELECT o GROUP BY. Por ejemplo, en una colección Sales, tiene documentos con la siguiente estructura:

{"customer": {"age": <Integer>}}

En este ejemplo, se pueden ejecutar las siguientes consultas para usar el subcampo age como clave de grupo:

"SELECT customerAge FROM Sales GROUP BY customer.age AS customerAge"
"SELECT customer.age as customerAge FROM Sales GROUP BY customerAge"

Aunque aplanes tus datos, los subcampos anteriores deben tener alias. Por ejemplo, en una colección Orders, tienes documentos con la siguiente estructura:

{"customer": {"address": {"city": <String>}}}

Después de aplanar la estructura, esta se convierte en {"customer_address_city": <String>}, y puede ejecutar las siguientes consultas para usar el subcampo city como clave de grupo:

"SELECT city FROM FLATTEN(orders) GROUP BY customer_address_city AS city"
"SELECT customer_address_city AS city FROM FLATTEN(orders) GROUP BY city"

MongoSQL admite las siguientes funciones de agregación.

Nombre
Descripción
notas

ADD_TO_ARRAY

Empuja el argumento al final de un arreglo. El resultado total de esta función será un arreglo.

El argumento de ADD_TO_ARRAY puede tener cualquier tipo.

ADD_TO_SET

Empuja el argumento al final de un arreglo removiendo duplicados. La salida total de esta función será un arreglo con todos los elementos duplicados eliminados. Los duplicados se determinan usando el operador =.

El argumento de ADD_TO_SET puede tener cualquier tipo.

AVG

Devuelve el promedio de todos los argumentos.

El argumento debe tener un tipo estático de tipo numérico.

COUNT

Cuenta el número de elementos. COUNT(*) cuenta todos los valores incondicionalmente. COUNT(<expression>) cuenta todos los valores para los cuales la expresión no resulta en NULL o MISSING.

El argumento de COUNT puede tener cualquier tipo.

FIRST

Devuelve el primer elemento del grupo.

Determinista solo cuando la entrada tiene un orden determinista; de lo contrario, es indefinido.

LAST

Devuelve el primer elemento del grupo. Determinista solo cuando la entrada tiene orden determinista, de lo contrario está indefinido.

El argumento de LAST puede tener cualquier tipo.

MAX

Devuelve el elemento máximo ordenado por el operador MongoSQL >.

El argumento debe tener un tipo estático para poder ser comparado mediante el operador >.

MERGE_DOCUMENTS

Devuelve un documento formado por la fusión sucesiva de documentos, con el elemento anterior utilizado como el lado izquierdo. En caso de claves duplicadas, se conserva el valor de la clave en el nuevo elemento. Al igual que con FIRST y LAST, la salida solo es determinista cuando la entrada tiene un orden determinista.

El argumento debe tener el tipo estático DOCUMENT.

MIN

Devuelve el elemento mínimo según el operador MongoSQL <.

El argumento debe tener un tipo estático para poder ser comparado mediante el operador <.

STDDEV_POP

Devuelve la desviación estándar de todos los elementos dentro de toda la población del grupo.

El argumento debe tener un tipo estático numérico. Consulta stdDevPop.

STDDEV_SAMP

Devuelve la desviación estándar de una muestra de todos los elementos de un grupo. Vea stdDevPop.

El argumento debe tener un tipo estático de tipo numérico.

SUM

Devuelve la suma de todos los argumentos.

El argumento debe tener un tipo estático de tipo numérico.

La cláusula HAVING funciona de la misma manera que la cláusula WHERE, pero después de la cláusula GROUP BY. Al igual que la cláusula WHERE, la cláusula HAVING toma una expresión que debe tener estáticamente el tipo BOOL o NULL y puede evaluarse a MISSING. Puede hacer referencia a alias definidos en el GROUP BY y puede contener expresiones con funciones de agregación. Solo los alias definidos en el GROUP BY están disponibles para la cláusula HAVING.

La cláusula ORDER BY proporciona una forma de ordenar un conjunto de resultados por una o más claves de ordenación. Cada clave de ordenación puede ser una referencia de columna o un literal entero que se refiere a una expresión SELECT por su posición en la lista de expresiones seleccionadas. Las claves de ordenación que son referencias de columna pueden ser identificadores compuestos. Estos identificadores compuestos pueden estar calificados con nombres de fuentes de datos o hacer referencia a subcampos de documentos.

MongoSQL organiza MISSING antes de NULL, y NULL antes de todos los demás valores. La cláusula ORDER BY requiere que todos los valores posibles en una expresión de clave de clasificación puedan verificarse estáticamente para ser comparables mediante los operadores > (mayor que) y < (menor que).

Las cláusulas LIMIT y OFFSET permiten a los usuarios recuperar solo algunas de las filas devueltas por una query. Si se proporciona un número LIMIT, no se devolverá más que esa cantidad de filas. Si se proporciona un número de OFFSET, se omite esa cantidad de filas antes de devolver las filas.

Tanto LIMIT como OFFSET deben ser números enteros positivos. Usar LIMIT o OFFSET sin ORDER BY no garantiza el mismo resultado.

Cuando LIMIT y OFFSET están configurados, las OFFSET filas se omitirán antes de devolver el resto de los resultados, los cuales no deben contener más de LIMIT filas.

LIMIT i, j es una forma más corta de LIMIT i OFFSET j.

LIMIT y OFFSET puede usarse en subconsultas.

Los operadores de conjuntos UNION y UNION ALL devuelven un solo conjunto de resultados para dos consultas SELECT. El operador UNION elimina las filas duplicadas del conjunto de resultados, mientras que el operador UNION ALL no elimina las filas duplicadas del conjunto de resultados. El conjunto de resultados devuelto por estos operadores no tiene un orden definido.

MongoSQL no admite las operaciones de conjunto INTERSECT o EXCEPT.

Los identificadores en MongoSQL se refieren a bases de datos, tablas y columnas. Los identificadores de MongoSQL admiten todos los caracteres UTF-8 excepto el carácter nulo \x00.

En MongoSQL, algunos identificadores están restringidos para evitar conflictos con caracteres que tienen otro significado semántico; para que un identificador incluya tal carácter, debe estar delimitado, es decir, rodeado de comillas dobles o acentos graves. Por ejemplo, un identificador debe estar delimitado si comienza con un dígito o si entra en conflicto con una palabra clave reservada (por ejemplo, "10cent") Los identificadores distinguen entre mayúsculas y minúsculas, ya sean delimitados o no.

Los identificadores se utilizan para todos los alias en MongoSQL. En la mayoría de los casos, MongoSQL devuelve un error si se utiliza un alias más de una vez en la misma cláusula. La excepción a esto es que los alias pueden repetirse en ambos lados de un UNION ALL. Esto también aplica a los alias generados automáticamente.

Las palabras clave de MongoSQL (como SELECT, FROM, JOIN, etc.) no pueden usarse como identificadores sin delimitadores.

MongoSQL admite literales para booleanos, nulos, números y cadenas de texto. Las cadenas están encerradas entre comillas simples. Para incluir un carácter de comilla simple en un literal de string, duplicalo ('o''clock').

Los enteros literales se escriben como INT cuando están dentro del rango de enteros con signo de 32bits y LONG en caso contrario. Los números literales de punto flotante o los números en notación científica tienen el tipo DOUBLE.

Nota

MongoSQL admite conversiones implícitas de tipo de cadenas codificadas en JSON extendido a su tipo correspondiente. Como MongoSQL admite todos los BSON types, y todos estos tipos pueden representarse como Extended JSON, se pueden incluir valores literales de cualquier tipo en una query. Es decir, puedes incluir un valor de string JSON extendido en cualquier lugar donde se espere una expresión y MongoSQL lo convertirá automáticamente al tipo literal correspondiente. Por ejemplo, SELECT '{"$numberInt": "1"}' + 2 FROM foo se interpreta como SELECT 1 + 2 FROM foo. Esto es especialmente útil para los literales de fecha y hora. Por ejemplo, SELECT * FROM foo WHERE myDate > '{"$date": "1995-06-28T03:05:00.000Z"}'.

Recomendamos utilizar JSON extendido implícito en lugar de la función CAST() (o su operador abreviado, ::) para escribir valores literales. Por ejemplo, no recomendamos CAST('1995-06-28T03:05:00.000Z' AS TIMESTAMP) para incluir un valor datetime literal en una query. El uso de CAST() o :: es válido y funciona, pero podría tener implicaciones negativas para el rendimiento, especialmente cuando se utiliza en una cláusula WHERE. La conversión implícita extendida de JSON no tiene ningún impacto negativo en el rendimiento.

Recomendamos que uses CAST() en una cláusula WHERE cuando quieras garantizar la seguridad de tipos y evitar la ambigüedad.

Una expresión entre paréntesis es una expresión agrupada entre paréntesis. Cada vez que hay operadores infijos presentes, puede ser necesario el uso de paréntesis (u otro mecanismo similar) para distinguir el orden de las operaciones. MongoSQL tiene varios operadores infijos, como + y ::. Por ejemplo, el valor de 1 + 2 * 3 es 7, mientras que el valor de (1 + 2) * 3 es 9.

MongoSQL admite los siguientes operadores básicos:

  • +

  • -

  • *

  • /

  • ||

  • <

  • <=

  • !=

  • ==

  • >

  • >=

  • BETWEEN

  • AND

  • OR

  • NOT

Una subconsulta es una consulta SQL dentro de otra consulta. Puedes utilizar una subconsulta en cualquier lugar donde se pueda usar una expresión.

MongoSQL admite subconsultas escalares y subconsultas de tabla. Una subconsulta escalar devuelve un conjunto de resultados con cero o una fila y una columna. Puede usarse en la mayoría de los lugares donde se acepta un valor literal o de columna única. Una subconsulta de tabla devuelve cero o más filas y una o más columnas.

Los documentos pueden ser representados con una sintaxis similar a la de los objetos JSON. Las claves deben ser cadenas de texto y los valores pueden tener cualquiera de los tipos soportados. Para acceder a los campos de los documentos, MongoSQL soporta dos opciones: notación de puntos y notación "corchete".

La notación de puntos es similar al acceso de campos en la agregación de MongoDB. Por ejemplo, si un documento doc contiene un campo f, entonces se utiliza la expresión doc.f para acceder al valor de ese campo. La notación de corchetes utiliza corchetes ([ y ]) alrededor de un nombre de campo para acceder al campo con ese nombre. Por ejemplo, consideremos el mismo documento descrito anteriormente: doc["f"] se utiliza para acceder al valor de ese campo.

BSON distingue entre NULL y MISSING. En el caso de NULL hay un campo con el valor literal NULL, mientras que en el caso de MISSING, el campo ha desaparecido.

Starting in MongoSQL 2.0.0, array functions let you operate on array values natively in your queries. The MAP, FILTER, and REDUCE functions correspond to the $map, $filter, and $reduce aggregation pipeline operators. MongoSQL also supports utility functions that cover common uses of these three functions.

Al igual que los operadores de canalización de agregación correspondientes, estas funciones utilizan la variable "this" para referirse al elemento de la matriz que procesan. REDUCE también utiliza la variable "value" para referirse al valor acumulado. MongoSQL no admite nombres personalizados para estas variables. Utilice "this" y "value".

MAP(array, function) Aplica una función a cada elemento de un array y devuelve el array transformado. MAP toma los siguientes argumentos:

  • Expresión de matriz

  • Expresión que especifica cómo transformar cada elemento del array.

Para referirse al elemento que procesa MAP, el segundo argumento debe usar la variable "this". Si el array está vacío, MAP devuelve un array vacío.

MAP Puede devolver un ARRAY o un NULL. Los siguientes requisitos se aplican a los argumentos:

  • El primer argumento debe ser estáticamente de tipo ARRAY o NULL, y podría evaluarse como MISSING. Si el primer argumento es NULL o MISSING, MAP devuelve NULL. El tipo de los elementos del array debe cumplir con los usos de "this" en el segundo argumento.

  • El segundo argumento puede ser cualquier expresión que sea semánticamente válida de forma estática. El tipo que devuelve el segundo argumento es el tipo de los elementos del array que devuelve MAP.

La siguiente consulta multiplica cada elemento del array por 2:

SELECT MAP([1, 2, 3], "this" * 2) AS doubled_values
{ '': { 'doubled_values': [2, 4, 6] } }

FILTER(array, function) Aplica una condición a cada elemento de un array y devuelve un array que contiene solo los elementos para los que la condición se evalúa como true, en su orden original. FILTER toma los siguientes argumentos:

  • Expresión de matriz

  • Expresión que especifica la condición que se debe comprobar para cada elemento del array.

Para referirse al elemento que procesa FILTER, el segundo argumento debe usar la variable "this". Si el array está vacío, FILTER devuelve un array vacío.

FILTER Puede devolver un ARRAY o un NULL. Dado que FILTER no transforma elementos, los elementos del array que devuelve FILTER tienen el mismo tipo que los elementos del array de entrada. Los siguientes requisitos se aplican a los argumentos:

  • El primer argumento debe ser estáticamente de tipo ARRAY o NULL, y podría evaluarse como MISSING. Si el primer argumento es NULL o MISSING, FILTER devuelve NULL. El tipo de los elementos del array debe cumplir con los usos de "this" en el segundo argumento.

  • El segundo argumento puede ser cualquier expresión que sea semánticamente válida de forma estática y que devuelva BOOL o NULL.

La siguiente consulta conserva únicamente los elementos con valores impares del array:

SELECT FILTER([1, 2, 3], MOD("this", 2) = 1) AS odd_values
{ '': { 'odd_values': [1, 3] } }

REDUCE(array, initialValue, function) Aplica una función a cada elemento de un array y combina los elementos en un único valor, comenzando con un valor inicial. REDUCE toma los siguientes argumentos:

  • Expresión de matriz

  • Expresión del valor inicial

  • Expresión que especifica cómo combinar cada elemento del array con el resultado acumulado de los elementos anteriores.

El resultado acumulado comienza con el valor inicial. Para referirse al elemento procesado por REDUCE, el tercer argumento debe usar la variable "this". Para referirse al valor acumulado, el tercer argumento debe usar la variable "value". Si el array está vacío, REDUCE devuelve el valor inicial.

REDUCE Devuelve un valor del mismo tipo que el tercer argumento, un valor del tipo del valor inicial, o ambos. Puede ser cualquier tipo de MongoSQL, incluido NULL. Los siguientes requisitos se aplican a los argumentos:

  • El primer argumento debe ser estáticamente de tipo ARRAY o NULL, y podría evaluarse como MISSING. Si el primer argumento es NULL o MISSING, REDUCE devuelve NULL. El tipo de los elementos del array debe cumplir con los usos de "this" en el tercer argumento.

  • El segundo argumento debe satisfacer los usos de "value" en el tercer argumento.

  • El tercer argumento puede ser cualquier expresión que sea semánticamente válida de forma estática y que satisfaga sus propios usos de "value". El tipo que devuelve el tercer argumento debe ser igual, superconjunto o subconjunto del segundo argumento. Los dos tipos pueden diferir si MongoSQL no detecta conflictos de esquema entre los usos de "value" en el tercer argumento y el tipo del segundo argumento.

La siguiente consulta suma los elementos del array, comenzando con 0:

SELECT REDUCE([1, 2, 3], 0, "value" + "this") AS summed_value
{ '': { 'summed_value': 6 } }

En lugar de una expresión, puedes pasar una función con nombre como último argumento a MAP, FILTER y REDUCE. Las funciones con nombre son una forma abreviada de expresiones que utilizan una única función u operador integrado. Por ejemplo, en lugar de MAP("array", LOWER("this")), puedes escribir MAP("array", LOWER). En lugar de REDUCE("array", 0, "value" + "this"), puedes escribir REDUCE("array", 0, +).

Puedes usar un argumento de función con nombre con cualquier operador unario o binario y con cualquier función escalar que acepte uno o dos argumentos.

MongoSQL admite las siguientes funciones de matriz, que son alias sintácticos para usos comunes de MAP, FILTER y REDUCE:

Nombre
Descripción
Ejemplo

ARRAY_CAST

Convierte todos los elementos del array al tipo de destino.

ARRAY_CAST(['1', '2', '3'], INT) devuelve [1, 2, 3].

ARRAY_EXTRACT

Extrae el valor en una ruta de campo de cada elemento de la matriz.

ARRAY_EXTRACT([{'a': 1, 'b': 10}, {'a': 2, 'b': '20'}], a) devuelve [1, 2].

ARRAY_COMPACT

Elimina los valores NULL y MISSING del array.

ARRAY_COMPACT([1, NULL, 2, NULL, 3]) devuelve [1, 2, 3].

ARRAY_REMOVE

Elimina todas las instancias de un valor del array.

ARRAY_REMOVE([1, 2, 2, 3, 2], 2) devuelve [1, 3].

ARRAY_COUNT_IF

Devuelve el número de elementos del array que coinciden con un predicado. El predicado se refiere al elemento que se compara con la variable "this".

ARRAY_COUNT_IF([1, 2, 3, 4, 5], "this" > 3) devuelve 2.

ARRAY_SUM

Devuelve la suma de una matriz de números.

ARRAY_SUM([1, 2, 3]) devuelve 6.

ARRAY_PRODUCT

Devuelve el producto de una matriz de números.

ARRAY_PRODUCT([4, 5, 6]) devuelve 120.

ARRAY_AVG

Devuelve el promedio de una matriz de números.

ARRAY_AVG([1, 2, 3]) devuelve 2.

ARRAY_ALL

Devuelve la conjunción de una matriz de valores booleanos.

ARRAY_ALL([true, false, true]) devuelve false.

ARRAY_ANY

Devuelve la disyunción de una matriz de valores booleanos.

ARRAY_ANY([false, false, true]) devuelve true.

ARRAY_JOIN

Devuelve la concatenación de una matriz de cadenas. El argumento separador es opcional y, por defecto, es una cadena vacía.

ARRAY_JOIN(['a', 'b', 'c']) returns 'abc'. ARRAY_JOIN(['a', 'b', 'c'], '-') returns 'a-b-c'.

Los comentarios son secuencias de caracteres dentro de las queries que no impactan la ejecución de la query. MongoSQL es compatible tanto con los comentarios estándar de SQL como con los comentarios en bloque de estilo C.

Los comentarios estándar de SQL comienzan con double guiones y terminan con una nueva línea:

\-- This is a standard SQL comment

Los comentarios de bloque comienzan con /* y finalizan en la ocurrencia coincidente de */.

/* This is a
multiline comment
*/