Azure cosmosdb 如何查询Cosmos DB以从结果集中的多个项中获得一个数组
我在容器中有以下内容,其中device_id是分区键 [ { id:hub-01, 设备id:device-01, 创建时间:2020-12-08T17:47:35, 队列:测试 }, { id:hub-02, 设备id:device-01, 创建时间:2020-12-08T17:47:36, 队列:测试 }, { id:hub-01, 设备id:device-02, 创建时间:2020-11-17T20:25:20, 队列:测试 }, { id:hub-01, 设备id:device-03, 创建时间:2020-11-17T16:05:18, 队列:测试 } ] 如何查询所有唯一的设备,并将其所有元数据收集到子列表中,从而获得以下结果集: [ { 设备id:device-01, 枢纽:[ { id:hub-01, 创建时间:2020-12-08T17:47:35, 队列:测试 }, { id:hub-02, 创建时间:2020-12-08T17:47:36, 队列:测试 } ] }, { 设备id:device-02, 枢纽:[ { id:hub-01, 创建时间:2020-11-17T20:25:20, 队列:测试 } ] }, { 设备id:device-03, 枢纽:[ { id:hub-01, 创建时间:2020-11-17T16:05:18, 队列:测试 } ] } ] 我尝试了以下子查询,但它的行为与我预期的不同: 选择 不同的c.U设备id, 大堆 选择 c2.id, c2.创建, c2.1队列 从c到c2 其中c2.device\u id=c.device\u id 作为枢纽 来自cAzure cosmosdb 如何查询Cosmos DB以从结果集中的多个项中获得一个数组,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我在容器中有以下内容,其中device_id是分区键 [ { id:hub-01, 设备id:device-01, 创建时间:2020-12-08T17:47:35, 队列:测试 }, { id:hub-02, 设备id:device-01, 创建时间:2020-12-08T17:47:36, 队列:测试 }, { id:hub-01, 设备id:device-02, 创建时间:2020-11-17T20:25:20, 队列:测试 }, { id:hub-01, 设备id:device-03,
您可以创建UDF函数来处理此问题。 下面是我在另一篇文章中回答的一个类似问题。
我同意Mo B。你需要在你的客户方处理这个问题。我认为UDF函数不能处理这个问题,因为UDF函数不能将多个项目合并到一个项目中。我认为最接近的SQL如下所示:
SELECT
c2.device_id,ARRAY_CONCAT([],c2.hubs)
FROM
(SELECT c.device_id,ARRAY(
SELECT
c.id,
c.created,
c.cohort
FROM c
) as hubs FROM c) as c2
GROUP BY c2.device_id
但是数组\u CONCAT不是聚合函数,也没有聚合函数可以连接数组。AFAIK不支持这种分组,因此您需要在客户端进行数据转换。