Azure Cosmos DB for NoSQL 中的关键字

适用范围: NoSQL

Azure Cosmos DB for NoSQL 的查询语言包括一组用于扩展功能的查询中的保留关键字。

BETWEEN

BETWEEN 关键字 (keyword) 的计算结果为一个布尔值,指示目标值是否介于两个指定值(包括该值)之间。

可以使用 BETWEEN 关键字和 WHERE 字句来表达针对字符串或数值范围的筛选结果的查询。 例如,以下查询返回价格在 17.2525.50 之间的所有项,包含该值。

SELECT VALUE
    p.price
FROM
    products p
WHERE
    p.price BETWEEN 17.25 AND 25.50
[
  20
]

还可以在 SELECT 子句中使用 BETWEEN 关键字,如以下示例所示。

SELECT 
    (p.price BETWEEN 0 AND 10) AS booleanLessThanTen,
    p.price
FROM
    products p
[
  {
    "booleanLessThanTen": false,
    "price": 20.0
  },
  {
    "booleanLessThanTen": true,
    "price": 7.5
  }
]

注意

与 ANSI SQL 不同,在 API for NoSQL 中,可以针对混合类型的属性表达范围查询。 例如,在某些项中,price 可能是类似于 5.0 的数字;而在其他一些项中,它可能是类似于 fifteenDollars 的字符串。 在这些情况下(与在 JavaScript 中一样),两个不同类型之间的比较会生成 undefined,因此会跳过该项。

DISTINCT

DISTINCT 关键字可消除投影查询结果中的重复项。

在此示例中,查询将投影产品类别的值。 如果两个类别等效,则结果中只返回一个匹配项。

SELECT DISTINCT VALUE
    p.category
FROM
    products p
[
  "Accessories",
  "Tools"
]

即使目标字段不存在,也可以投影值。 在这种情况下,某个项中不存在字段,因此查询返回该特定唯一值的空对象。

SELECT DISTINCT
    p.category
FROM
    products p

结果有:

[
  {},
  {
    "category": "Accessories"
  },
  {
    "category": "Tools"
  }
]

LIKE

根据特定字符串是否与指定的模式匹配,返回布尔值。 模式可以包含常规字符和通配符。

提示

可以使用 LIKE 关键字或 RegexMatch 系统函数编写在逻辑上等效的查询。 无论选择哪一种,索引利用率都将相同。 对选项的选择很大程度上基于语法首选项。

注意

由于 LIKE 可以利用索引,因此你应为你要使用 LIKE 来比较的属性创建范围索引

可以将以下通配符与 LIKE 配合使用:

说明 示例
% 包含零个或多个字符的任意字符串。 WHERE c.description LIKE "%SO%PS%"
_(下划线) 任何单个字符。 WHERE c.description LIKE"%SO_PS%"
[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 内的任何单个字符。 WHERE c.description LIKE "%SO[t-z]PS%"
[^] 不在指定范围 ([^a-f]) 或集合 ([^abcdef]) 内的任何单个字符。 WHERE c.description LIKE "%SO[^abc]PS%"

% 字符匹配包含零个或多个字符的任意字符串。 例如,通过在模式的开头和末尾放置 %,以下查询返回指定字段包含 substring 短语的所有项:

SELECT VALUE
    p.name
FROM
    products p
WHERE
    p.name LIKE "%driver%"

如果只在模式结尾使用 % 字符,则只会返回带有以 fruit 开头的说明的项:

SELECT VALUE
    p.name
FROM
    products p
WHERE
    p.name LIKE "%glove"

同样,模式开头的通配符指示要匹配指定值作为前缀的值:

SELECT VALUE
    p.name
FROM
    products p
WHERE
    p.name LIKE "Road%"

NOT 关键字反转 LIKE 关键字表达式计算的结果。 此示例返回与 LIKE 表达式匹配的所有项。

SELECT VALUE
    p.name
FROM
    products p
WHERE
    p.name NOT LIKE "%winter%"

可以使用 ESCAPE 子句搜索包含一个或多个通配符的模式。 例如,如果要搜索包含字符串 20% 的说明,则不需要将 % 解释为通配符。 此示例将 ^ 解释为转义字符,以便可以转义 % 的特定实例。

SELECT VALUE
    p.name
FROM
    products p
WHERE
    p.description LIKE "%20^%%" ESCAPE "^"

可以将通配符括在中括号内,以便将它们视为文本字符。 将通配符放在中括号内时,其所有特殊属性均会去除。 此表包含文本字符的示例。

分析值
LIKE "20-30[%]" 20-30%
LIKE "[_]n" _n
LIKE "[ [ ]" [
LIKE "]" ]

IN

使用 IN 关键字可以检查指定的值是否与列表中的任一值匹配。 例如,以下查询返回类别与列表中至少一个值匹配的所有项。

SELECT
    *
FROM
    products p
WHERE
    p.category IN ("Accessories", "Clothing")

提示

如果在 IN 筛选器中包含分区键,则查询会自动地仅筛选出相关分区。

TOP

TOP 关键字以未定义的顺序返回前 N 个查询结果。 最佳做法是将 TOPORDER BY 子句配合使用,将结果限制为前 N 个有序值。 要预见性地指示哪些行受到 TOP 的影响,只能结合使用这两个子句。

可以结合一个常量值使用 TOP(如以下示例中所示),或者在参数化查询中结合一个变量值使用 TOP。

SELECT TOP 10
    *
FROM
    products p
ORDER BY
    p.price ASC