javascript - azure cosmos db 中是否有having 子句?如何使用它?

标签 javascript azure azure-cosmosdb

我试图编写一个查询,从所有文档中查找最大值。该场景类似于我有 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

我使用的查询是: select MAX(s.Marks) from c join test in c.Test1 join s in test.marks

最佳答案

根据您的描述,您希望在 azure cosmosdb 查询中实现类似 GROUP BY 的功能。

根据我的经验,SQL 中的 azure cosmosdb 聚合 功能仅限于 COUNT、SUM、MIN、MAX、AVG 函数。 azure cosmosdb 不支持 GROUP BY 或其他聚合功能现在。

但是,可以使用存储过程UDF来实现您的聚合需求。

你可以引用一个很棒的包documentdb-lumenize基于DocumentDb存储过程。

对于您帖子中的第一个场景,我在我的 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'

enter image description here

对于您评论中的第二种情况,我删除了上面 SQL 的 where 子句

SELECT  c.StudentRollNo,test1.Marks as mark FROM c
join test1 in  c.Test

结果集如:

enter image description here

这仅适用于一个测试。如果您想查询多个测试,您可以使用存储过程

您还可以引用下面的SO线程:

1. Azure DocumentDB - Group By Aggregates

2. Grouping by a field in DocumentDB

关于javascript - azure cosmos db 中是否有having 子句?如何使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46345374/

相关文章:

azure - 在达到预算之前发出有关 azure 成本的警报

azure - 了解 Kusto

使用 @CurrentInteration 时 Azure DevOps 查询错误

mongodb - 在使用 CLI 创建的 MongoDB 分片集合中插入文档时出错

作为参数的 Javascript 函数不生效

javascript - 在 javascript 中引用类实例化器

javascript - Dojox.Mobile.ComboBox 不响应 Android 上的选择

c# - ExecuteStoredProcedureAsync() 返回不同的结果

c# - Azure.DocumentDb 在 HTTP 请求中找到的 MAC 签名与计算的签名不同

javascript - 使用 CSS 或 Java 显示或隐藏空白内容区域