使用 Cosmos db 中的索引从对象数组中获取 DISTINCT 值

问题描述 投票:0回答:1

我有一个容器,里面有大约 9000 个这样的文档(为简洁起见,进行了简化):

{
    "id": "111",
    "productid": "111"
    "data": {
        "Channel": "All",
        "Headline": [
            {
                "Culture": "en",
                "Value": "English name"
            },
            {
                "Culture": "da",
                "Value": "Danish name"
            }
        ]
   }
}

如果我想获得 DISTINCT

Channel
值,那么我可以这样做:

SELECT DISTINCT VALUE c.data.Channel FROM c

此查询花费了我约 5 RU,并且不检索任何文档,但为我提供了我需要的值。

如果我想获取所有 DISTINCT

Culture
值,那么类似的查询不会返回任何内容:

SELECT DISTINCT VALUE c.data.Headline.Culture FROM c

我可以更改该查询以加入标题,并获得我想要的结果:

SELECT DISTINCT VALUE h.Culture FROM c JOIN h IN c.data.Headline

但是,上述查询成本约为 4800 RU,并在幕后检索所有 9000 个文档。即使所有属性都在文档中建立了索引。

有没有办法让这个 DISTINCT 适用于对象数组上的属性?

或者我是否必须添加一个新的

data.HeadlineCultures[]
字符串数组,然后使用它?

更新:我刚刚尝试创建一个

data.HeadlineCultures[]
字符串数组,它与复杂数组对象具有完全相同的问题,所以这不是解决方案。

azure-cosmosdb
1个回答
0
投票

您可以直接使用以下查询,而不是使用

JOIN

SELECT  distinct  value h.Culture FROM h IN c.data.Headline

在服用之前。

enter image description here

服用后明显。 enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.