我试图编写一个从所有文档中查找MAX值的查询。该场景就像我有100个学生文档,其中学生姓名,卷号以及该主题数组及其各自标记内的测试数组。所以,我从所有文件中获得了主题物理学中最高的分数。但是我没有得到学生卷数。那是我试图找出来的。
TestDoc is:
Student[
StudenName:"A",
StudentRollNo :1,
id:"1",
StudentAdd:"---",
Test1:[
{
SubName:"S1",
Marks:20
},
{
SubName:"S2",
Marks:30
},
...
],
Test2:
[
Same as above
],
],
[
STUDENT2
] ,
and so on
我使用的查询是: 从test.marks中的c.Test1 join s中的c join test中选择MAX(s.Marks)
答案 0 :(得分:1)
根据您的描述,您希望在azure cosmosdb查询中实现GROUP BY
之类的函数。
根据我的经验,SQL中的azure cosmosdb aggregation
功能仅限于COUNT, SUM, MIN, MAX, AVG
个功能。 azure cosmosdb现在不支持GROUP BY
或其他聚合功能。
但是,stored procedures
或UDF
可用于实现您的汇总要求。
您可以根据DocumentDb存储过程引用一个很棒的包documentdb-lumenize。
对于您帖子中的第一个场景,我在我的azure cosmosdb帐户中创建了两个学生文档。
[
{
"id": "1",
"StudenName": "A",
"StudentRollNo": 1,
"Test": [
{
"SubName": "S1",
"Marks": 20
},
{
"SubName": "S2",
"Marks": 30
}
],
},
{
"id": "2",
"StudenName": "B",
"StudentRollNo": 2,
"Test": [
{
"SubName": "S1",
"Marks": 10
},
{
"SubName": "S2",
"Marks": 40
}
],
}
]
然后我将下面的SQL搜索的结果集放到上面提到的documentdb-lumenize
以获得max
S2标记。
SELECT c.StudentRollNo,test1.Marks as mark FROM c
join test1 in c.Test
where test1.SubName='S2'
对于评论中的第二个场景,我删除了上面SQL的where clause
。
SELECT c.StudentRollNo,test1.Marks as mark FROM c
join test1 in c.Test
和resultset
喜欢:
这仅适用于one
测试。如果您想查询multiple
测试,可以使用stored procedure
。
你也可以参考下面的SO线程: