您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

Azure Cosmos DB 中的 WHERE 子句

适用于: SQL API

可选的 WHERE 子句 (WHERE <filter_condition>) 指定条件,查询只会将满足这些条件的源 JSON 项包含在结果中。 JSON 项必须将指定的条件评估为 true 才被视作结果。 索引层使用 WHERE 子句来确定可以作为结果的一部分的源项的最小子集。

语法

WHERE <filter_condition>  
<filter_condition> ::= <scalar_expression>  
  

参数

  • <filter_condition>

    指定需要满足什么条件才会返回文档。

  • <scalar_expression>

    表示待计算值的表达式。 有关详细信息,请参阅标量表达式

备注

指定为筛选条件的表达式的求值结果必须为 true,才会返回文档。 只有布尔值 true 会满足条件,其他任何值(undefined、null、false、数字、数组或对象)都不会满足条件。

如果将分区键作为等式筛选器的一部分包含在 WHERE 子句中,则查询将仅自动筛选出相关分区。

示例

以下查询请求包含值为 AndersenFamilyid 属性的项。 它会排除任何不带 id 属性或值与 AndersenFamily 不匹配的项。

    SELECT f.address
    FROM Families f
    WHERE f.id = "AndersenFamily"

结果有:

    [{
      "address": {
        "state": "WA",
        "county": "King",
        "city": "Seattle"
      }
    }]

WHERE 子句中的标量表达式

上面的示例演示了一个简单的等式查询。 SQL API 还支持各种标量表达式。 最常使用的是二进制和一元表达式。 来自源 JSON 对象的属性引用也是有效的表达式。

可以使用以下受支持的二元运算符:

运算符类型
算术 +、-、*、/、%
|、&、^、<<、>>、>>>(补零右移)
逻辑 AND、OR、NOT
比较 =、!=、<、>、<=、>=、<>
String ||(连接)

以下查询使用二元运算符:

    SELECT *
    FROM Families.children[0] c
    WHERE c.grade % 2 = 1     -- matching grades == 5, 1

    SELECT *
    FROM Families.children[0] c
    WHERE c.grade ^ 4 = 1    -- matching grades == 5

    SELECT *
    FROM Families.children[0] c
    WHERE c.grade >= 5    -- matching grades == 5

还可以在查询中使用一元运算符 +、-、~ 和 NOT,如以下示例所示:

    SELECT *
    FROM Families.children[0] c
    WHERE NOT(c.grade = 5)  -- matching grades == 1

    SELECT *
    FROM Families.children[0] c
    WHERE (-c.grade = -5)  -- matching grades == 5

还可以在查询中使用属性引用。 例如,SELECT * FROM Families f WHERE f.isRegistered 返回包含值等于 trueisRegistered 属性的 JSON 项。 任何其他值(例如falsenullUndefined<number><string><object><array>)会从结果中排除该项。 此外,还可以使用 IS_DEFINED 类型检查函数根据是否存在给定 JSON 属性进行查询。 例如,SELECT * FROM Families f WHERE NOT IS_DEFINED(f.isRegistered) 返回没有 isRegistered 值的所有 JSON 项。

后续步骤