IntelliJ IDEA 2025.1 Help

适用于 MongoDB 的 SQL

在 MongoDB 中,为了操作数据或执行其他操作,您需要使用 JavaScript 为 mongo shell 编写脚本。 对于主要使用 SQL 查询数据的开发人员,使用 SQL 查询 MongoDB 的集合也可能会很有帮助。 IntelliJ IDEA 将把您的 SQL 查询转换为 JavaScript。

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

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

查看 SQL 查询的 JavaScript 翻译

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

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

数据类型

IntelliJ IDEA 支持以下数据类型:

  • 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";

对象构造函数

您可以使用以下对象构造函数: BinDataHexDataUUIDMD5ObjectID日期ISODate代码DBRefRegExpNumberIntNumberLongNumberDecimalTimestampMinKeyMaxKey

您可以使用或跳过 new 关键字。 IntelliJ IDEA 会自动将 new 关键字添加到 MongoDB 查询中。 此功能不适用于 日期 对象构造函数,因为 Date()new Date() 之间存在差异。 Date() 返回当前日期字符串,并且 new Date() 作为日期对象。

如果函数名称未知,IntelliJ IDEA 会在函数名称之前搜索 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 聚合管道运算符,除了 mapreducefilterlet。 此外,您可以使用 COUNT(*),但不支持 COUNT (expression)。

在 MongoDB 中,某些函数需要命名参数。 要使用命名参数,请使用 PostgreSQL 的语法来表示命名参数(例如, =>:=)。 如果您未为参数化函数指定名称,您将会收到错误。 请考虑以下关于 dateToString 函数的示例:

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

您可以在 docs.mongodb.com 的聚合管道操作符中查看所有支持命名参数的管道操作符列表。

限制

  • 由于 SQL 和 MongoDB 中聚合函数的不同实现方式,您不能将聚合函数(例如 AVG、SUM、MIN 和 MAX)用作非聚合函数。 例如, SELECT MAX(1,2,3) 将不起作用。

    在 MongoDB 中,函数如 AVG、SUM、MIN 和 MAX 可能是聚合和非聚合的。 如果它们被放置在 group 块中,它们是聚合的。 否则,它们是非聚合的。

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

  • 您不能在其他聚合函数中调用聚合函数。

运算符

当前支持以下功能:

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

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

    LIKE 运算符的通配符

SQL 语句

SELECT

对于 SELECT 查询,支持以下功能。

  • 选项: DISTINCTALL

  • 聚合函数和非聚合函数。

  • 通过使用点符号名称访问嵌入字段。 请参考下面的示例

    嵌入字段

限制

  • 列可以有别名。 别名不得包含句点(.)。

FROM

  • 您可以为表使用别名。

  • 对于嵌套的 SELECT 语句,您必须使用别名。

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

    嵌套 SELECT 查询

限制

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

JOIN

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

  • 仅支持 ON 条件。

  • ON 部分中仅支持一个条件。 以下查询将导致错误:

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

  • 支持多个 JOIN 子句。

限制

  • USING 不受支持。

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

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

WHERE

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

GROUP BY

IntelliJ IDEA 支持 GROUP BY 子句。

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

GROUP BY

HAVING

IntelliJ IDEA 支持 HAVING 子句。

HAVING

ORDER BY

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

ORDER BY

LIMIT

IntelliJ IDEA 支持 LIMIT 子句。

LIMIT

OFFSET

IntelliJ IDEA 支持 OFFSET 子句。

OFFSET
最后修改日期: 2025年 4月 24日