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分组,但我认为我的答案并不比下面发布的答案好。