适用于 MongoDB 的 SQL
在 MongoDB 和 DocumentDB 中,若要操作数据或执行其他操作,您需要编写 JavaScript 脚本用于 mongo shell。 对于主要使用 SQL 查询数据的开发者,也可将 SQL 用于 MongoDB 或 DocumentDB 集合中,这可能会更加便捷。 GoLand 将把您的 SQL 查询转换为 JavaScript。
若要查看 SQL 的 JavaScript 版本,请右键点击查询并选择 显示JS 脚本。
当前实现支持 SELECT 查询及以下子句:
JOIN、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、OFFSET。
查看 SQL 查询的 JavaScript 转换
右键点击查询并选择 显示JS 脚本。 要将 JavaScript 代码复制到剪贴板,请点击 将JS 脚本复制到剪贴板。
您可以在 JS 脚本预览 中修改并运行脚本。


数据类型
GoLand 支持以下数据类型:
字符串、整数、浮点数、布尔值
NULL、NAN、INFINITY
数组(
[1, 2, 3])和映射({a: 1, b: 2, c: 3})
数组和映射可包含任意表达式。
字符串字面量可以使用单引号或双引号。
列名称可省略引号,也可以使用反引号(`)。
对象构造函数
您可以使用以下对象构造函数: BinData、 HexData、 UUID、 MD5、 ObjectID、 Date、 ISODate、 Code、 DBRef、 RegExp、 NumberInt、 NumberLong、 NumberDecimal、 Timestamp、 MinKey、 MaxKey。
您可以使用或跳过 new 关键字。 GoLand 会自动将 new 关键字添加到 MongoDB 或 DocumentDB 查询中。 由于 Date() 与 new Date() 存在差异,因此此功能不适用于 Date 对象构造函数。 Date() 返回当前日期的字符串, new Date() 返回 Date 对象。
如果函数名称未知,GoLand 会在函数名称前查找 new 关键字。 如果存在 new 关键字,则将该名称视为对象构造函数。 否则,将其视为函数调用。 例如,以下查询:
将被转换为:
函数
您可以使用除 map、 reduce、 filter 和 let 外的所有可用 MongoDB 和 DocumentDB 聚合管道操作符。 另外,您可以使用 COUNT(*),但不支持 COUNT(expression)。
在 MongoDB 和 DocumentDB 中,某些函数需要具名参数。 要使用具名参数,请使用类似于 PostgreSQL 的参数命名语法(例如, => 或 :=)。 如果未为参数化函数指定名称,则会发生错误。 以下是 dateToString 函数的示例:
您可以在 docs.mongodb.com 中的 Aggregation Pipeline Operators 查看支持具名参数的所有管道操作符列表。
限制
由于 SQL 与 MongoDB 和 DocumentDB 在聚合函数处理方式上的不同,您不能将聚合函数(例如 AVG、SUM、MIN 和 MAX)用作非聚合函数。 例如,
SELECT MAX(1,2,3)将无法使用。在 MongoDB 和 DocumentDB 中,
AVG、SUM、MIN与MAX等函数既可以是聚合函数,也可以是非聚合函数。 如果将其置于group块中,则为聚合函数。 否则为非聚合函数。在 SQL 中,不存在此类依赖关系,您可以在不使用 GROUP BY 子句的情况下使用聚合函数(例如,
SELECT AVG(x) FROM t)。无法在一个聚合函数中调用另一个聚合函数。
运算符
当前支持以下功能:
操作数:
=、==、>=、<=、>、<、<>、!=、+、-、/、*、%、AND、OR、NOT、LIKE、NOT LIKE、IS、IS NOT、IN、NOT IN、BETWEEN、NOT BETWEEN。您可以对
LIKE操作符使用通配符。 这些通配符会被转换为适用于 MongoDB 或 DocumentDB 的有效正则表达式。

SQL 子句
SELECT
以下功能适用于 SELECT 查询。
选项:
DISTINCT、ALL。聚合函数与非聚合函数。
通过使用点表示法访问嵌套字段。 请参阅以下示例。


限制
列可以有别名。 别名不得包含句点(
.)。
FROM
您可以为表使用别名。
对于嵌套的
SELECT语句,您必须使用别名。您可以使用嵌套的
SELECT查询。 例如,以下查询是有效的:

限制
别名不得包含句点(
.)。
JOIN
仅支持
JOIN(INNER JOIN)和LEFT JOIN(LEFT OUTER JOIN)。仅支持
ON条件。ON部分中只能包含一个条件。 以下查询将导致错误:

在
ON条件中,您可以使用==或=运算符。支持多个
JOIN子句。
限制
不支持
USING。不能在
JOIN子句中将SELECT语句用作第二个参数。在
JOIN子句中,表名和别名不得重复。
WHERE
LIKE和NOT LIKE需要字符串字面量。 以下查询将导致错误:

GROUP BY
GoLand 支持 GROUP BY 子句。
SELECT 子句可以包含在功能上依赖于 GROUP BY 子句中表达式的表达式。 如果某列在 GROUP BY 子句中使用,您可以在 SELECT 子句中使用该列的嵌套字段。


HAVING
GoLand 支持 HAVING 子句。


ORDER BY
GoLand 支持 ORDER BY 子句。 您可以使用 SORT BY 替代 ORDER BY。


LIMIT
GoLand 支持 LIMIT 子句。


OFFSET
GoLand 支持 OFFSET 子句。

