首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQL的Cosmos DB查询数组值

使用SQL的Cosmos DB查询数组值
EN

Stack Overflow用户
提问于 2022-04-22 17:08:54
回答 1查看 646关注 0票数 1

我的cosmos DB中有几个结构如下的JSON文件。

代码语言:javascript
复制
[
{
    "USA":  {
        "Applicable": "Yes",
        "Location": {
            "City": [
                "San Jose",
                "San Diego"
                ]
        }
    }
}]

我想查询所有数组值为city = "San Diego“的结果/文件。

我尝试了以下sql查询

代码语言:javascript
复制
SELECT DISTINCT *
FROM c["USA"]["Location"]
WHERE ["City"] IN ('San Diego')

SELECT DISTINCT *
FROM c["USA"]["Location"]
WHERE ["City"] = 'San Diego'

SELECT c 
FROM c JOIN d IN c["USA"]["Location"]
WHERE d["City"] = 'San Diego'

我得到的结果是0 - 0

EN

回答 1

Stack Overflow用户

发布于 2022-04-22 23:18:41

您需要从整个文档中查询数据,其中USA.Location.City数组包含一个项。例如:

代码语言:javascript
复制
SELECT *
FROM c
WHERE ARRAY_CONTAINS (c.USA.Location.City, "San Jose")

这会给你你想要达到的目标。

注意:您的模式中有一个轻微的反模式,使用"USA“作为键,这意味着您无法轻松地查询所有的位置名称。您应该将其替换为如下所示:

代码语言:javascript
复制
{
    "Country": "USA",
    "CountryMetadata":  {
        "Applicable": "Yes",
        "Location": {
            "City": [
                "San Jose",
                "San Diego"
                ]
        }
    }
}

这使您可以查询所有不同的国家。然后,上面的查询只需要稍微修改一下:

代码语言:javascript
复制
SELECT *
FROM c
WHERE c.Country = "USA
AND ARRAY_CONTAINS (c.CountryMetadata.Location.City, "San Jose")

请注意,该查询现在适用于任何国家,您可以将country值作为参数传递(vs需要将国家名称硬编码到查询中,因为它是一个实际的键名)。

不要把价值作为你的钥匙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71972386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档