Cosmos DB嵌套数组长度求和查询:如何同时返回作家名称与评论总数
解决Cosmos DB查询同时返回作家名称和评论总数的问题
要同时获取作家名称和其所有文章的评论总数,你只需要在聚合查询中把作家的标识属性(比如id)和名称一起加入GROUP BY子句,或者使用子查询直接计算总数。下面提供两种可行的方案:
方案1:通过JOIN展开嵌套数组并分组统计
这种方式会展开每篇文章的每一条评论,然后按作家分组统计评论数量,结果最准确,能自动忽略空评论数组的情况:
SELECT w.name AS WriterName, COUNT(c) AS WriterCommentsCount FROM Writers w JOIN p IN w.posts JOIN c IN p.comments GROUP BY w.id, w.name
代码解释:
JOIN p IN w.posts:展开作家的所有文章数组JOIN c IN p.comments:进一步展开每篇文章的评论数组GROUP BY w.id, w.name:按作家的唯一ID和名称分组(必须同时包含这两个,保证分组的唯一性,避免同名作家被合并)COUNT(c):统计分组内的评论总数
方案2:通过数组长度求和统计
如果不需要展开到单条评论级别,也可以直接计算每篇文章的评论数总和,效率更高:
SELECT w.name AS WriterName, SUM(ARRAY_LENGTH(p.comments)) AS WriterCommentsCount FROM Writers w JOIN p IN w.posts GROUP BY w.id, w.name
代码解释:
ARRAY_LENGTH(p.comments):计算单篇文章的评论数量SUM(...):对作家所有文章的评论数求和- 同样通过
GROUP BY w.id, w.name保留作家的名称属性
处理无文章/无评论的作家
如果需要包含那些没有发布文章或者文章没有评论的作家,让他们的评论数显示为0,可以使用子查询结合ISNULL函数:
SELECT w.name AS WriterName, ISNULL((SELECT VALUE SUM(ARRAY_LENGTH(p.comments)) FROM p IN w.posts), 0) AS WriterCommentsCount FROM Writers w
以上三种查询都能返回你需要的格式结果,针对你的示例数据,输出都会是:
[ { "WriterName": "John", "WriterCommentsCount": 2 } ]
内容的提问来源于stack exchange,提问作者Mojtaba Khooryani
相关产品推荐
相关产品推荐

