我试图在集合中的嵌套对象中找到重复项。在你的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"
}
]
我所尝试过的任何内容都没有效果,并且不适合在这里展示。
答案 0 :(得分:1)
是的,正如您所提到的,CosmosDB目前不支持 GROUP BY
,也不支持任何其他聚合。
但是,您可以使用 documentdb-lumenize
来实现群组。您将 cube.string
作为存储过程加载,然后使用聚合配置调用它。
{cubeConfig: {groupBy: "name", field: "stuff.name", f: "max"}}
应该做你想做的事。
或者如果您仍想使用sql api,可以尝试使用Join,如答案 here
我个人也面临同样的问题,但在检索过滤条件的记录后,我必须使用自定义逻辑进行管理。
修改强>
根据下面的评论,它应该是,因为您提到CosmosDB目前不支持 GROUP BY
,也不支持任何其他聚合。
答案 1 :(得分:0)
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
P.S。此外,Cosmos db现在支持分组依据 https://docs.microsoft.com/en-gb/azure/cosmos-db/sql-query-group-by