如何在Cosmos DB中按userId分组并获取最新完整卡片数据
Cosmos DB 获取每个用户最新修改的完整卡片
可以实现,利用ARRAY_AGG聚合函数结合排序来获取每个用户最新的完整卡片文档,具体SQL语句如下:
SELECT c.userId, ARRAY_AGG(c ORDER BY c.modifiedAt DESC)[0] AS latestCard FROM Card c WHERE ARRAY_CONTAINS([""], c.userId) GROUP BY c.userId
语句说明:
ARRAY_AGG(c ORDER BY c.modifiedAt DESC):将同一个userId分组下的所有卡片文档,按modifiedAt从新到旧排序后聚合成一个数组[0]:取数组的第一个元素,也就是该用户最新修改的完整卡片,包含createdAt、id、number等所有字段
你之前的查询只能返回分组键和聚合后的modifiedAt,是因为Cosmos DB的GROUP BY规则限制:SELECT子句只能包含分组键和聚合函数结果,无法直接选择非分组的其他字段。通过ARRAY_AGG聚合并排序后取首元素的方式,就能绕过这个限制拿到完整的最新卡片信息。
内容的提问来源于stack exchange,提问作者Mahammad Khalilov
相关产品推荐
相关产品推荐

