You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 08:22:42