2

我正在尝试在集合中的嵌套对象中查找重复项。在古老的 SQL 中,我会使用某种 GROUP BY 和 COUNT 来执行此操作。Cosmos DB 不支持 GROUP BY(据我所知),所以我正在尝试寻找解决方法。一个限制是我只能访问 azure 门户中的数据浏览器(不要问)。

为了更详细地解释,假设您有一个如下所示的集合。请注意,第一项在“stuff”集合中有重复项:

[
    {
        "id": "1",
        "Name": "Item with duplicate stuff",
        "stuff" : [
            {
                "name" : "A",
            },
            {
                "name" : "B",
            },
            {
                "name" : "A"
            }  
        ]
    },
    {
        "id": "2",
        "Name": "Item with unique stuff",
        "stuff" : [
            {
                "name" : "A",
            },
            {
                "name" : "B",
            },
            {
                "name" : "C"
            }  
        ]
    }    

我想在我的集合中找到在“stuff”属性中有重复项的所有项目。所以在这种情况下,它将返回 id 为“1”的项目。这样的事情会做得很好:

[
    {
        "id": "1"
    } 
] 

我尝试过的任何东西都没有效果,也不适合在这里展示。

4

2 回答 2

2

Cosmos db 支持子查询和 DISTINCT 关键字。所以,这样的事情应该有效

  SELECT n2
    FROM c
    JOIN (SELECT DISTINCT value s.name FROM s IN c['stuff'])  n2

第一项的结果

[
    {
        "n2": "A"
    },
    {
        "n2": "B"
    },
    {
        "n2": "C"
    }
]

参考: https ://docs.microsoft.com/en-gb/azure/cosmos-db/sql-query-subquery

PS 另外,Cosmos db 现在支持 Group By https://docs.microsoft.com/en-gb/azure/cosmos-db/sql-query-group-by

于 2019-10-17T03:49:11.893 回答
1

是的,正如您提到的,CosmosDB 目前不支持GROUP BY也不支持任何其他聚合。

但是,您可以使用documentdb-lumenize. cube.string您作为存储过程加载,然后使用聚合配置调用它。

{cubeConfig: {groupBy: "name", field: "stuff.name", f: "max"}}

那应该做你想做的事。

或者,如果您仍想使用 sql api,您可以尝试使用 Join,如答案中所述here

就我个人而言,我也面临同样的问题,但是在使用过滤条件检索记录后,我必须使用我的自定义逻辑进行管理。

编辑

在下面的评论中,应该是 Yes 正如你提到的 CosmosDB 目前不支持也不支持任何其他聚合GROUP BY

于 2018-05-29T17:49:59.043 回答