用于 MongoDB 的 SQL
最后修改时间:2023 年 9 月 20 日在 MongoDB 中,要操纵数据或执行其他操作,您可以使用 JavaScript 为 mongo shell 编写脚本。对于主要使用 SQL 查询数据的开发人员来说,将 SQL 用于 MongoDB 集合也可能会有所帮助。IntelliJ IDEA 会将您的 SQL 查询转换为 JavaScript。
要查看 SQL 的 JavaScript 版本,请右键单击查询并选择“显示 JS 脚本”。
当前的实现支持 SELECT 查询和以下子句:JOIN、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、OFFSET。
查看 SQL 查询的 JavaScript 翻译
右键单击查询并选择“显示 JS 脚本”。要将 JavaScript 代码复制到剪贴板,请单击“将 JS 脚本复制到剪贴板”。
您可以从JS 脚本预览更改并运行脚本。
数据类型
IntelliJ IDEA 支持以下数据类型:
字符串、整数、浮点型、布尔型
NULL、NAN、无穷大
数组 (
[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";
对象构造函数
您可以使用以下对象构造函数:BinData
, HexData
, UUID
, MD5
, ObjectID
, Date
, ISODate
, Code
, DBRef
, RegExp
, NumberInt
, NumberLong
, NumberDecimal
, Timestamp
, MinKey
, MaxKey
。
您可以使用或跳过该new
关键字。IntelliJ IDEA 会new
自动将关键字添加到 MongoDB 查询中。Date
由于 和 之间的差异,此功能不适用于对象构造函数Date()
new Date()
。Date()
以字符串和new Date()
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}
}
])
功能
您可以使用除map
、reduce
、filter
和 之外的所有可用的 MongoDB 聚合管道运算符let
。另外,您可以使用 COUNT(*),但不能使用尚不支持的 COUNT(表达式)。
在 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
)。您不能在其他聚合函数中调用聚合函数。
运营商
目前支持以下功能:
操作数:
=
,==
,>=
,<=
,>
,<
,<>
,!=
,+
,-
,/
,*
,%
,AND
,OR
,NOT
,LIKE
,NOT LIKE
,IS
,IS NOT
,IN
,NOT IN
,BETWEEN
,NOT BETWEEN
。您可以对 LIKE 运算符使用通配符。这些通配符被转换为 MongoDB 的有效正则表达式。
SQL 子句
选择
SELECT 查询支持以下功能。
选项:独特、全部。
聚合函数和非聚合函数。
使用点名称访问嵌入字段。考虑以下示例。
局限性
列可能有别名。别名不得包含句点 (
.
)。
从
您可以使用表的别名。
您必须对嵌套 SELECT 语句使用别名。
您可以使用嵌套 SELECT 查询。例如,以下查询是有效的:
局限性
别名不得包含句点 (
.
)。
加入
仅支持 JOIN(INNER JOIN)和 LEFT JOIN(LEFT OUTER JOIN)。
仅支持 ON 条件。
ON部分只有一个条件。以下查询将导致错误:
您可以在 ON 条件下使用
==
or运算符。=
支持多个 JOIN 子句。
局限性
不支持使用。
不能使用 SELECT 语句作为 JOIN 子句中的第二个参数。
JOIN 子句中的表名称和别名不得重复。
在哪里
LIKE 和 NOT LIKE 需要字符串文字。以下查询结果出错:
通过...分组
IntelliJ IDEA 支持 GROUP BY 子句。
SELECT 子句可能包含在功能上依赖于 GROUP BY 子句中的表达式的表达式。如果列在 GROUP BY 子句中使用,则可以在 SELECT 子句中使用该列的嵌入字段。

拥有
IntelliJ IDEA 支持 HAVING 子句。

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

限制
IntelliJ IDEA 支持 LIMIT 子句。

抵消
IntelliJ IDEA 支持 OFFSET 子句。

感谢您的反馈意见!