WebStorm 2021.1 Help

用于 MongoDB 的 SQL

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

请参阅 SQL 查询的 JavaScript 翻译

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

    您可以从JS Script Preview更改和运行脚本。

数据类型

WebStorm 支持以下数据类型:

  • 字符串、整数、浮点数、布尔值

  • 空,南,无穷大

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

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

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

您可以在单引号或双引号中使用字符串文字。

写出不带引号的列名或使用重音 ( `)。

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关键字。WebStorm 会new自动将关键字添加到 MongoDB 查询中。此功能不适用于Date对象构造函数,因为Date() new Date(). 以字符串和Date 对象Date()的形式返回当前日期。new Date()

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

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

将被翻译成:

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

职能

map您可以使用除、reducefilter和之外的所有可用 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 的有效正则表达式。

    LIKE 运算符的通配符

SQL 子句

选择

SELECT 查询支持以下功能。

  • 选项:不同,全部。

  • 聚合和非聚合函数。

  • 使用虚线名称访问嵌入字段。考虑以下示例。

    嵌入字段

限制

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

  • 您可以为表使用别名。

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

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

    嵌套的 SELECT 查询

限制

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

加入

  • 仅支持 JOIN(INNER JOIN)和 LEFT JOIN(LEFT OUTER JOIN)。

  • 仅支持 ON 条件。

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

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

  • 支持多个 JOIN 子句。

限制

  • 不支持使用。

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

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

在哪里

  • LIKE 和 NOT LIKE 需要字符串文字。以下查询导致错误:

通过...分组

WebStorm 支持 GROUP BY 子句。

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

通过...分组

拥有

WebStorm 支持 HAVING 子句。

拥有

订购方式

WebStorm 支持 ORDER BY 子句。您可以使用 SORT BY,而不是 ORDER BY。

订购方式

限制

WebStorm 支持 LIMIT 子句。

限制

抵消

WebStorm 支持 OFFSET 子句。

抵消
最后修改:2021 年 12 月 14 日