如何在不使用ARRAY()函数的情况下,对CosmosDB中不同数组内的元素分别执行去重查询?
如何在不使用ARRAY()函数的情况下,对CosmosDB中不同数组内的元素分别执行去重查询?
我完全懂你的需求——你想要针对每个文档里的school数组单独做元素去重,而不是把所有文档的sourcen值混在一起全局去重,而且还不能用ARRAY()函数对吧?咱们可以用子查询结合DISTINCT的方式来实现,刚好能满足你的要求。
直接给你可用的查询语句:
SELECT (SELECT DISTINCT s.sourcen FROM s IN c.source.pass.ploy.school) AS $1 FROM c
我给你拆解下这个查询的逻辑:
- 外层的
FROM c会遍历你集合里的每一个文档(就是你例子里的document1、document2) - 内层的子查询
(SELECT DISTINCT s.sourcen FROM s IN c.source.pass.ploy.school)会专门针对当前文档c里的school数组,逐个取出sourcen值并做去重处理 - 最后用
AS $1把去重后的结果命名为你需要的$1字段,这样每个文档都会输出一个包含对应去重后sourcen数组的对象,和你期望的输出完全一致
用你提供的示例数据测试的话,这个查询会返回你想要的结果:
[ { "$1": [ "data", "data1" ] }, { "$1": [ "data1", "data2", "data3" ] } ]
顺便说下你之前查询的问题:你写的SELECT DISTINCT sourcen FROM [tablename.source.pass.ploy.school]是把所有文档的school数组展开后做全局去重,所以会得到所有唯一的sourcen值,而不是每个文档单独去重,这就和你的需求不匹配啦。
备注:内容来源于stack exchange,提问作者ann
相关产品推荐
相关产品推荐

