【问题标题】:Cosmos DB query element countCosmos DB 查询元素计数
【发布时间】:2019-07-16 02:28:00
【问题描述】:

我想找出一个元素出现了多少次。从样本中我想获得元素计数。如果我们看到数据。元素出现两次,内部元素(如名称)也出现两次。像那样我想找到元素出现的计数。

我尝试查看一些 group by 子句,但在 CosmosDB 中找不到任何 group by 选项。

{“数据”:[[{“元素”:[{“姓名”:“马”,“性别”:“男性”,“城市”:“纽约”,“州”:“纽约”}, {“性别”:“女性”,“城市”:“洛杉矶”,“州”:“加利福尼亚”},{“姓名”:“布鲁斯”,“性别”:“男性”,“城市”:“芝加哥” " } ], "细分": [ { "Low": "20", "Block": "227", "Subcode": "MIRROR", "Legal_Desc_Map_Plat_Type_Indicator": "PLA" } ], "Elements": [ { “姓名”:“马”,“性别”:“男性”,“城市”:“纽约”},{“性别”:“女性”,“城市”:“洛杉矶”,“州”:“加利福尼亚” }, { “姓名”:“布鲁斯”,“性别”:“男性”,“州”:“伊利诺伊州”} ] } ] ],“_ts”:1559463991 }

结果类似。 Element = 2, Element.Name = 2 等等。

【问题讨论】:

  • 您好,我的回答对您有帮助吗?
  • 小杰,没有数据可以查询[0]吗?
  • 不确定你的意思。 data[0] 是基于你的数据格式,如果去掉最外层[],就不需要data[0]
  • 那么,还有什么进一步的解释吗?

标签: azure-cosmosdb azure-cosmosdb-sqlapi


【解决方案1】:

首先,你的截图是不可能的。Elements 键不能在单个对象中复制。

您的需求可以通过COUNT 聚合函数来实现。

对于元素:

SELECT value(count(data.Elements))
FROM c
join data in c.data

结果:

姓名:

SELECT value(count(elem.Name))
FROM c
join data in c.data
join elem in data.Elements

结果:


为了您的进一步需要:

由于 WHERE 子句中不允许使用聚合,

也许您需要自己处理结果。 Group By 自然不支持(feedback),但是您可以了解基于 DocumentDb 存储过程的出色软件包 documentdb-lumenize。您可以计算elements 并按其他列分组,例如id

【讨论】:

  • 嗨,Jay,我会尽量改进我的屏幕截图。您的查询几乎就在那里,但需要更多帮助。如果你看到“元素”在多个数组中,那么数据没有像你所说的那样返回值,但是如果我改变它它会起作用(比如 data[0].Elements)。是否可以帮助放置 Where 子句以选择计数大于 1. SELECT value(count(elem.Name)) FROM c join data in c.data join elem in data[0].Elements。跨度>
  • @RSimple 哦,因为我删除了一个嵌套的[],所以我不需要使用数据[0]。算了!
猜你喜欢
  • 1970-01-01
  • 2020-09-24
  • 2018-12-17
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多