SQL 查询包含对象数组中的 属性 值

SQL Query CONTAINS property value in array of objects

我正在尝试创建一个 SQL 查询以获取用户所属公司的列表。数据库是 Cosmos DB Serverless,容器名为“公司”,里面有多个公司项目:

公司项目结构如下:

    {
        "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "name": "Company Name",
        "users": [
            {
                "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
                "name": "Susan Washington",
                "email": "susan.washington@gmail.com",            
                "createdBy": "xxxx@gmail.com",
                "createdServerDateUTC": "2022-01-12T19:21:10.0644424Z",
                "createdLocalTime": "2022-01-12T19:21:09Z"
            },
            {
                "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
                "name": "Kerwin Evans",
                "title": "Test Dev",
                "email": "kerwin.e@yahoo.com",
                "createdBy": "xxxx@gmail.com",
                "createdServerDateUTC": "2022-01-12T19:21:10.0644424Z",
                "createdLocalTime": "2022-01-12T19:21:09Z"
            },
        
            ETC.
        ]
    }

这是我尝试使用的 SQL 查询,其中用户是我传入的电子邮件:

    SELECT *
    FROM c
    WHERE IS_NULL(c.deletedServerDateUTC) = true
      AND CONTAINS(c.users, user)
    ORDER BY c.name DESC
    OFFSET 0 LIMIT 10

这行不通,因为 users 属性 是一个数组。所以我相信我需要检查用户数组中的每个对象,看看电子邮件 属性 是否与我输入的用户匹配。

您可以通过ARRAY_CONTAINS()查询数组。对于您指定的给定 username 的 return 公司名称,类似这样的内容:

SELECT c.name
FROM c
WHERE ARRAY_CONTAINS(c.users,{'name': username}, true)

第三个参数设置为true表示数组元素是文档,而不是标量值。