WebStorm 2025.2 Help

适用于 MongoDB 的 SQL

在 MongoDB 和 DocumentDB 中,若要操作数据或执行其他操作,需使用 JavaScript 为 mongo shell 编写脚本。 对于主要使用 SQL 查询数据的开发人员,也可以考虑对 MongoDB 或 DocumentDB 的集合使用 SQL。 WebStorm 会将您的 SQL 查询翻译为 JavaScript。

  • 要查看 SQL 的 JavaScript 版本,请右键点击查询并选择 显示JS 脚本

  • 当前的实现支持 SELECT 查询以及以下子句: JOINWHEREGROUP BYHAVINGORDER BYLIMITOFFSET

查看 SQL 查询的 JavaScript 转换结果

  • 右键点击查询并选择 显示JS 脚本。 要将 JavaScript 代码复制到剪贴板,请点击 将JS 脚本复制到剪贴板

    您可以在 JS 脚本预览 修改并运行脚本。

alt_translated_js_code
alt_translated_js_code

数据类型

WebStorm 支持以下数据类型:

  • String、Integer、Float、Boolean

  • NULL、NAN、INFINITY

  • 数组([1, 2, 3] )和映射({a: 1, b: 2, c: 3}

数组和映射可以包含任意表达式。

SELECT [1, 3 + 1 - 2, price] AS elements FROM sales; SELECT {a: 1 + 2, b: NULL, c: FALSE, d: [1, 2]} FROM sales;

字符串字面量可以使用单引号或双引号。

列名可以不加引号,或者使用反引号(`)。

SELECT _id, `acquisitions`, `category_code`, `description`, email_address, phone_number FROM companies WHERE category_code = 'social' AND description = "Mobile Dating";

对象构造函数

您可以使用以下对象构造器: BinDataHexDataUUIDMD5ObjectIDDateISODateCodeDBRefRegExpNumberIntNumberLongNumberDecimalTimestampMinKeyMaxKey

您可以选择是否使用 new 关键字。 WebStorm 将自动向 MongoDB 或 DocumentDB 查询中添加 new 关键字。 由于 Date()new Date() 之间的差异,此功能不适用于 Date 对象构造器。 Date() 将当前日期作为字符串返回,而 new Date() 返回为 Date 对象。

如果函数名称未知,WebStorm 会在函数名称前查找 new 关键字。 如果存在 new 关键字,则名称被视为对象构造器。 否则,视为函数调用。 例如,以下查询:

SELECT new UnknownTypeConstructor() AS A, new NumberInt() AS B, NumberInt(1) AS C FROM companies;

将被转换为:

db.getSiblingDB("admin").getCollection("companies").aggregate([ { $project: {"A": {$literal: new UnknownTypeConstructor()}, "B": {$literal: new NumberInt()}, "C": {$literal: new NumberInt(1)}, "_id": 0} } ])

函数

您可以使用所有可用的 MongoDB 和 DocumentDB 聚合管道运算符,但不包括 mapreducefilterlet。 此外,您可以使用 COUNT(*),但不能使用 COUNT(表达式),该功能尚不支持。

在 MongoDB 和 DocumentDB 中,某些函数需要命名参数。 要使用命名参数,请采用类似 PostgreSQL 的语法指定命名参数(例如, =>:=)。 如果未为参数化函数指定名称,将会出现错误。 以下是 dateToString 函数的示例:

SELECT dateToString(date => ISODate(), format := '%H:%M:%S:%L%z', timezone => 'Europe/London') AS 'Date' FROM companies;

您可以在 docs.mongodb.com 上的 Aggregation Pipeline Operators 页面查看支持命名参数的所有管道运算符列表。

限制

  • 由于 SQL 与 MongoDB、DocumentDB 在聚合函数处理方式上的不同,无法将聚合函数(如 AVG、SUM、MIN 和 MAX)作为非聚合函数使用。 例如, SELECT MAX(1,2,3) 将无法执行。

    在 MongoDB 和 DocumentDB 中,像 AVGSUMMINMAX 这样的函数既可以是聚合函数,也可以是非聚合函数。 如果这些函数位于 group 块中,则它们是聚合函数。 否则,它们为非聚合函数。

    在 SQL 中,不存在此类依赖关系,您可以在不使用 GROUP BY 子句的情况下调用聚合函数(例如, SELECT AVG(x) FROM t)。

  • 无法在其他聚合函数中调用聚合函数。

运算符

当前支持以下功能:

  • 操作数: ===>=<=><<>!=+-/*%ANDORNOTLIKENOT LIKEISIS NOTINNOT INBETWEENNOT BETWEEN

  • 您可以为 LIKE 运算符使用通配符。 这些通配符会转换为可在 MongoDB 或 DocumentDB 中使用的有效正则表达式。

    LIKE 运算符的通配符
    LIKE 运算符的通配符

SQL 子句

SELECT

以下功能适用于 SELECT 查询。

  • 可用选项: DISTINCTALL

  • 聚合函数与非聚合函数。

  • 通过使用点分名称访问嵌套字段。 请参考以下示例。

    嵌套字段
    嵌套字段

限制

  • 列可以使用别名。 别名不能包含句点(.)。

FROM

  • 您可以为表使用别名。

  • 嵌套的 SELECT 语句必须使用别名。

  • 您可以使用嵌套的 SELECT 查询。 例如,以下查询是有效的:

    嵌套 SELECT 查询
    嵌套 SELECT 查询

限制

  • 别名不能包含句点(.)。

JOIN

  • 仅支持 JOININNER JOIN )和 LEFT JOINLEFT OUTER JOIN)。

  • 仅支持 ON 条件。

  • ON 部分中只能包含一个条件。 以下查询将导致错误:

    ON 部分只允许一个条件
    ON 部分只允许一个条件
  • 您可以在 ON 条件中使用 === 运算符。

  • 支持多个 JOIN 子句。

限制

  • USING 不受支持。

  • JOIN 子句中,不能将 SELECT 语句用作第二个参数。

  • JOIN 子句中,表名和别名不能重复。

WHERE

  • LIKENOT LIKE 需要字符串字面量。 以下查询将导致错误:

    LIKE 和 NOT LIKE 需要字符串字面量
    LIKE 和 NOT LIKE 需要字符串字面量

GROUP BY

WebStorm 支持 GROUP BY 子句。

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

GROUP BY
GROUP BY

HAVING

WebStorm 支持 HAVING 子句。

HAVING
HAVING

ORDER BY

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

ORDER BY
ORDER BY

LIMIT

WebStorm 支持 LIMIT 子句。

LIMIT
LIMIT

OFFSET

WebStorm 支持 OFFSET 子句。

OFFSET
OFFSET
最后修改日期: 2025年 9月 26日