【问题标题】:How to run a sql query in Cosmos DB where a particular key is having multiple values如何在特定键具有多个值的 Cosmos DB 中运行 sql 查询
【发布时间】:2020-09-08 12:25:12
【问题描述】:

Below 是我在 CosmosDB 中添加的 JSON 文件:

{
    "A": [
        "Uganda",
        "Vietnam",
        "Colombia",
        "Guatemala",
        "Paraguay",
        "Afghanistan",
        "India",
        "Iran",
        "Nepal",
        "Pakistan"
    ],
    "B": [
        "Bricks",
        "Bricks",
        "Bricks",
        "Broccoli",
        "Cabbages",
        "Carpets",
        "Carpets",
        "Carpets",
        "Carpets",
        "Carpets"
    ],
    "C": [
        "Child ",
        "Child ",
        "Child ",
        "Child ",
        "Child ",
        "Child ",
        "Child , Non Child",
        "Child",
        "Child , Non Child",
        "Child , Non Child"
    ]

当我尝试以下查询时:

SELECT *from tbl f WHERE f.Country = 'Uganda'

我得到 0 个结果。我的印象是我的 JSON 中有多个值的单个键导致了问题。

如何处理这个 JSON?

【问题讨论】:

  • 您的 JSON 没有任何名为 Country 的属性。除此之外:看看ARRAY_CONTAINS()(这里有许多与在数组中搜索直接相关的问题和答案)。这应该会有所帮助...
  • 是的,大卫,我正在研究这些选项,但不知何故,我的印象是,我的 json 数据的存在方式可能存在问题,因为它无法填充任何数据。
  • 你的 JSON 模式的问题是你有键(例如 "A" 包含实际数据。也就是说:"A" 代表什么?如果它是某物的价值,那么你真的应该考虑将您的架构重构为键:值(例如{ "someKey" : "A", someValues: [...] } 。否则实际上无法在事先不知道它们的情况下枚举所有值 A、B、C 等。
  • 如果你只做SELECT * FROM c会得到什么?

标签: azure azure-cosmosdb azure-cosmosdb-sqlapi


【解决方案1】:

您文档中的属性A 似乎是Country

作为 David cmets,ARRAY_CONTAINS() 可以做到这一点,试试这个 SQL:

SELECT * FROM c WHERE ARRAY_CONTAINS(c.A,"Uganda")

【讨论】:

  • 我添加了上面的查询,但仍然得到 0 个结果,我已经为上面的内容添加了一个屏幕。
  • 请在您的文档中将“A”替换为您的不动产,可能是“Country”。如果属性“A”是未知键,您需要像 David 所说的那样更改架构。
猜你喜欢
  • 2020-06-06
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 1970-01-01
相关资源
最近更新 更多