Azure cosmosdb 嵌套数组长度COSMOS DB的查询和

Azure cosmosdb 嵌套数组长度COSMOS DB的查询和,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure Cosmosdb,Azure Cosmosdb Sqlapi,假设此模型: 拥有一组作者文档,每个作者都有一些帖子。每个Post都包含一个注释数组 JSON: 我需要一个返回以下输出的查询: [ { "WriterName": "John", "WriterCommentsCount": 2 } ] 我设法获得了作者的评论,但在获取writercommentscont旁边的名称(或其他属性)时遇到问题。你知道怎么知道作者的名字吗 这就是我到目前为止尝试过的(只有作者的评论

假设此模型:

拥有一组
作者
文档,每个
作者
都有一些
帖子
。每个
Post
都包含一个
注释数组

JSON:

我需要一个返回以下输出的查询:

[
 {
     "WriterName": "John",
     "WriterCommentsCount": 2
 }
]
我设法获得了作者的评论,但在获取
writercommentscont
旁边的名称(或其他属性)时遇到问题。你知道怎么知道作者的名字吗

这就是我到目前为止尝试过的(只有作者的评论才算数)

最简单的方法是制作一个平面结构,每个评论都有一个条目。之后,您可以使用
groupby
对相同名称的所有条目进行分组。请尝试以下操作:

SELECT 
    c.name AS WriterName, 
    COUNT(1) AS WriterCommentsCount
FROM c
JOIN s IN c.posts
JOIN t IN s.comments
WHERE c.id = '1'
GROUP BY c.name

最简单的方法是制作一个平面结构,每个注释都有一个条目。之后,您可以使用
groupby
对相同名称的所有条目进行分组。请尝试以下操作:

SELECT 
    c.name AS WriterName, 
    COUNT(1) AS WriterCommentsCount
FROM c
JOIN s IN c.posts
JOIN t IN s.comments
WHERE c.id = '1'
GROUP BY c.name

按照您的想法,如果我们执行sql

SELECT c.name,array_length(post.comments) as countC FROM c join post in c.posts where c.id = '1' 
我们将得到如下响应:

[
    {
        "name": "John",
        "countC": 1
    },
    {
        "name": "John",
        "countC": 3
    },
    {
        "name": "John",
        "countC": 0
    }
]
因此,使用此
选择c.name,sum(数组长度(post.comments))作为c.posts中c.join post的countC,其中c.id='1'
将返回错误“属性引用'c.name'无效”。解决方案是使用“按c.name分组”

我在评论中的答案和@404中的答案在这一点上都是一样的,不同的是我按照你的想法使用sum函数,他在展开所有子项后使用count(1)。我的sql成本为'3.09 RUs',他的成本与我的测试数据相同

这是情况截图。

按照您的想法,如果我们执行sql

SELECT c.name,array_length(post.comments) as countC FROM c join post in c.posts where c.id = '1' 
我们将得到如下响应:

[
    {
        "name": "John",
        "countC": 1
    },
    {
        "name": "John",
        "countC": 3
    },
    {
        "name": "John",
        "countC": 0
    }
]
因此,使用此
选择c.name,sum(数组长度(post.comments))作为c.posts中c.join post的countC,其中c.id='1'
将返回错误“属性引用'c.name'无效”。解决方案是使用“按c.name分组”

我在评论中的答案和@404中的答案在这一点上都是一样的,不同的是我按照你的想法使用sum函数,他在展开所有子项后使用count(1)。我的sql成本为'3.09 RUs',他的成本与我的测试数据相同

这是情况截图。

选择c.name,sum(array_length(post.comments))作为c.posts中的c join post中的countC,其中c.id='1'按c.name分组,但我认为我的答案并不比下面发布的答案好。选择c.name,sum(array_length(post.comments))作为c.c中的countC,在c.posts中加入post,其中c.id='1'按c.name分组,但我认为我的答案并不比下面发布的答案好。