Docs Menu
Docs Home
/ /

Referencia del lenguaje MongoSQL

Esta página describe la sintaxis y la semántica de MongoSQL, un dialecto SQL que la interfaz SQL utiliza para recuperar SQL de usuarios o herramientas y, posteriormente, traducir dichas sentencias a MQL (lenguaje de consulta MongoDB). Esta página enumera y describe las cláusulas, operadores, expresiones y funciones compatibles.

  • 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 date El tipo de dato no es compatible. Utilice timestamp en su lugar.

    • No se admiten operaciones aritméticas de intervalos e intervalos de fechas.

  • MongoSQL no admite MongoDB Vector Search ni MongoDB Search.

Los tipos de datos de MongoSQL son el conjunto de BSON typesTodos estos tipos se pueden consultar en MongoSQL. Son:

  • Cadena (STRING)

  • Documento (DOCUMENT)

  • Matriz (ARRAY)

  • BinData (BINDATA)

  • ObjectId (OBJECTID)

  • Booleano (BOOL)

  • Fecha (TIMESTAMP)

  • Nulo (NULL)

  • Expresión regular (REGEX)

  • Entero de 32bits (INT)

  • Doble (DOUBLE)

  • Long (LONG)

  • Marca de tiempo (BSON_TIMESTAMP)

  • Decimales (DECIMAL)

  • MinKey (MINKEY)

  • Tecla máxima (MAXKEY)

  • Puntero DB (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 usar para hacer referencia al tipo cuando sea necesario, como en una expresión como CAST.

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

MongoSQL convierte los valores de documentos flexibles de MongoDB en tipos mediante un esquema. Un MongoSQL Unesquema es una colección de hechos sobre una expresión o colección que se sabe que son verdaderos en el momento de la compilación.

Por ejemplo, un esquema MongoSQL podría dictar que una expresión es un valor booleano o un documento con subcampos, o que una expresión es una matriz con una longitud de uno o un entero positivo.

Si no se satisface una restricción de tipo estático, la consulta no podrá compilarse.

La gestión de esquemas difiere entre la herramienta manual local y la herramienta automatizada Atlas.

Las consultas 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 Comienza cada consulta SQL de Atlas. MongoSQL permite usar SELECT VALUE y SELECT VALUES indistintamente.

MongoSQL requiere que las instrucciones anidadas SELECT tengan un alias.

SELECT foo FROM (SELECT bar FROM baz) as subSelect

Utilice 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 es importante para la comparación de documentos, y tanto el orden como el valor de los elementos son importantes para la comparación de matrices.

SELECT DISTINCT bar FROM baz

MongoSQL admite la función CAST(), que le permite convertir dinámicamente valores en su consulta a un tipo de datos determinado.

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

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

La cláusula WHERE filtra los datos entrantes. Su expresión debe ser estáticamente de tipo BOOL o NULL y puede evaluarse como MISSING.

GROUP BY Proporciona un medio para agrupar y agregar datos.

Si se GROUP BY utiliza en un campo que se ha aplanado mediante FLATTEN o UNWIND, se requiere un alias.

SELECT customerAge, COUNT(*) FROM Sales GROUP BY customer.age AS customerAge

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 estar tipificado estáticamente en un tipo numérico.

COUNT

Cuenta la cantidad de elementos. COUNT(*) cuenta todos los valores incondicionalmente. COUNT(<expression>) cuenta todos los valores para los cuales la expresión no da como resultado NULL o MISSING.

El argumento de COUNT puede tener cualquier tipo.

FIRST

Devuelve el primer elemento del grupo.

Determinista sólo cuando la entrada tiene orden determinista, de lo contrario no definido.

LAST

Devuelve el primer elemento del grupo. Es determinista solo cuando la entrada tiene un orden determinista; de lo contrario, no está definido.

El argumento de LAST puede tener cualquier tipo.

MAX

Devuelve el elemento máximo según lo ordenado por el operador > de MongoSQL.

El argumento debe estar tipificado estáticamente para ser comparable a través del operador >.

MERGE_DOCUMENTS

Devuelve un documento formado mediante la fusión sucesiva de documentos, con el elemento anterior 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 un tipo estático DOCUMENT.

MIN

Devuelve el elemento mínimo según lo ordenado por el operador < de MongoSQL.

El argumento debe estar tipificado estáticamente para ser comparable a través del operador <.

STDDEV_POP

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

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

STDDEV_SAMP

Devuelve la desviación estándar de una muestra de todos los elementos del grupo. Véase stdDevPop.

El argumento debe estar tipificado estáticamente en un tipo numérico.

SUM

Devuelve la suma de todos los argumentos.

El argumento debe estar tipificado estáticamente en un tipo numérico.

La cláusula HAVING funciona de la misma manera que una 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 ser estáticamente de tipo BOOL o NULL y puede evaluarse como MISSING. Puede hacer referencia a alias definidos en GROUP BY y contener expresiones con funciones de agregación. Solo los alias definidos en GROUP BY están disponibles para la cláusula HAVING.

La cláusula ORDER BY permite ordenar un conjunto de resultados mediante una o más claves de ordenación. Cada clave de ordenación puede ser una referencia a una columna o un literal entero que hace referencia a una expresión SELECT por su posición en la lista de expresiones de selección. Las claves de ordenación que son referencias a columnas pueden ser identificadores compuestos. Estos identificadores compuestos pueden calificarse con nombres de fuentes de datos o hacer referencia a subcampos del documento.

MongoSQL ordena MISSING antes que NULL y NULL antes que todos los demás valores. La cláusula ORDER BY requiere que todos los valores posibles en una expresión de clave de ordenación se puedan verificar estáticamente para que sean 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 consulta. Si se proporciona un número LIMIT, no se devolverá más de ese número de filas. Si se proporciona un número OFFSET, se omite ese número de filas antes de devolver las filas.

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

Cuando LIMIT y OFFSET están configurados, se omitirán las OFFSET filas antes de devolver el resto de los resultados, que 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 se pueden utilizar en subconsultas.

Los operadores de conjunto UNION y UNION ALL devuelven un único 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 las elimina. El conjunto de resultados devuelto por estos operadores no tiene un orden definido.

MongoSQL no admite 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 dicho carácter, debe estar delimitado, es decir, entre comillas dobles o comillas invertidas. Por ejemplo, un identificador debe estar delimitado si comienza con un dígito o si entra en conflicto con una palabra clave reservada (p. "10cent" ej.,). Los identificadores distinguen entre mayúsculas y minúsculas, estén delimitados o no.

En MongoSQL, se utilizan identificadores para todos los alias. En la mayoría de los casos, MongoSQL devuelve un error si un alias se usa más de una vez en la misma cláusula. La excepción es que los alias pueden repetirse a 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 se pueden utilizar como identificadores no delimitados.

MongoSQL admite literales para booleanos, valores nulos, números y cadenas. Las cadenas se escriben entre comillas simples. Para incluir una comilla simple en un literal de cadena, duplíquela ('o''clock').

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

Nota

MongoSQL admite la conversión implícita de tipos de cadenas con codificación JSON extendida a su tipo correspondiente. Dado que MongoSQL admite todos los tipos BSON y todos ellos pueden representarse como JSON extendido, se pueden incluir valores literales de cualquier tipo en una consulta. Es decir, se puede incluir un valor de cadena JSON extendida donde se espere una expresión y MongoSQL lo convierte 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 literales de fecha y hora. Por ejemplo, SELECT * FROM foo WHERE myDate > '{"$date": "1995-06-28T03:05:00.000Z"}'.

Recomendamos usar la función JSON extendida implícita en lugar de la función CAST() (o su operador abreviado, ::) para escribir valores literales. Por ejemplo, no recomendamos usar CAST('1995-06-28T03:05:00.000Z' AS TIMESTAMP) para incluir un valor literal de fecha y hora en una consulta. Usar CAST() o :: es válido y funciona, pero podría afectar negativamente al rendimiento, especialmente al usar una cláusula WHERE. La conversión implícita de JSON extendida no afecta negativamente al rendimiento.

Le recomendamos que utilice CAST() en una cláusula WHERE cuando desee garantizar la seguridad del tipo y evitar la ambigüedad.

Una expresión entre paréntesis es una expresión agrupada entre paréntesis. Siempre que haya operadores infijos, puede ser necesario usar paréntesis (o un mecanismo similar) para distinguir el orden de las operaciones. MongoSQL cuenta con varios operadores infijos, como + y ::. Por ejemplo, el valor de 1 + 2 * 3 es 7, mientras que el 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. Se puede usar una subconsulta en cualquier lugar donde se pueda usar una expresión.

MongoSQL admite subconsultas escalares y de tabla. Una subconsulta escalar devuelve un conjunto de resultados con cero o una fila y una columna. Se puede usar en la mayoría de los casos donde un valor literal o de una sola columna es válido. Una subconsulta de tabla devuelve cero o más filas y una o más columnas.

Los documentos se pueden representar con una sintaxis similar a la de los objetos JSON. Las claves deben ser cadenas y los valores pueden tener cualquiera de los tipos admitidos. Para acceder a los campos del documento, MongoSQL admite dos opciones: notación de punto y notación de corchetes.

La notación de puntos es similar al acceso a campos en la agregación de MongoDB. Por ejemplo, si un documento doc contiene un campo f, se utiliza la expresión doc.f para acceder a su valor. La notación de corchetes utiliza corchetes ([ y ]) alrededor del nombre de un campo para acceder a él. Por ejemplo, considere el mismo documento descrito anteriormente: se utiliza doc["f"] 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 desaparece.

Los comentarios son secuencias de caracteres dentro de las consultas que no afectan su ejecución. MongoSQL admite tanto comentarios SQL estándar como comentarios de bloque de estilo C.

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

\-- This is a standard SQL comment

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

\* This is a
multiline comment
*/

Volver

Errors

En esta página