Azure cosmosdb 如何查询Cosmos DB以从结果集中的多个项中获得一个数组

Azure 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,

我在容器中有以下内容,其中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 作为枢纽 来自c
您可以创建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不支持这种分组,因此您需要在客户端进行数据转换。