如何通过Cosmos DB聚合查询返回指定aId的bIds列表及计数?
Cosmos DB 聚合查询:获取指定aId对应的bIds列表与计数
需求说明
给定如下文档结构:
[ { "id": "1", "aId": "2", "bId": "3" }, { "id": "2", "aId": "2", "bId": "4" } ]
需要编写查询,当指定aId(如aId="2")时,返回包含该aId、对应所有bId的数组以及计数的单行JSON,示例响应:
{ "aId": "2", "bIds" : ["4","3"], "bIds count" : 2 }
正确查询语句
使用GROUP BY结合ARRAY_AGG和COUNT函数可直接实现需求:
SELECT c.aId, ARRAY_AGG(DISTINCT c.bId) AS bIds, COUNT(DISTINCT c.bId) AS "bIds count" FROM c WHERE c.aId = '2' -- 替换为传入的aId参数 GROUP BY c.aId
错误查询分析
你之前尝试的查询存在以下问题:
- 未使用聚合逻辑,导致每条匹配的文档生成一行结果,无法将
bId合并为数组 - 错误的
JOIN和子查询写法,导致数组生成语句失效
比如你之前的查询:
select c.aId as aId, count(c2) as bIdCount, array(select distinct value c2.bId from c2) from c join (select c.bId from c) as c2 where c.aId = 'SOME_ID'
这里的c2子查询范围错误,且未结合分组逻辑,导致数组生成失败。而ARRAY_AGG是Cosmos DB中生成聚合数组的标准方式,配合GROUP BY能确保返回单行结果。
内容的提问来源于stack exchange,提问作者λjk.jk
相关产品推荐
相关产品推荐

