我有多个这样的json文档
{
"event": "eb1518fb-81d1-49aa-9854-405267a7828f",
"identityId": "5eb44b44-d5ce-4473-815c-591a4ff1bea3",
"bookingCode": "ABCDE",
"status": "SUCCESS",
"clientId": "DESKTOP",
"created": "2021-04-15T04:16:35+00:00",
"locationType": "STORE"
},
{
"event": "eb1518fb-81d1-49aa-9854-405267a7828f",
"identityId": "5eb44b44-d5ce-4473-815c-591a4ff1bea3",
"bookingCode": "ABCDE",
"status": "FAILURE",
"clientId": "MOBILE",
"created": "2021-04-15T04:16:35+00:00",
"locationType": "STORE"
},
{
"event": "eb1518fb-81d1-49aa-9854-405267a7828f",
"identityId": "q1244b44-d5ce-4473-815c-591a4ff1bea3",
"bookingCode": "BCD",
"status": "SUCCESS",
"clientId": "MOBILE,
"created": "2021-04-15T04:16:35+00:00",
"locationType": "STORE"
},
...
我想通过身份id和预订代码应用组来获得唯一的记录,并需要在过滤后获得整个JSON文档,像这样
select *, count(*) from eventbooking where event = "eb1518fb-81d1-49aa-9854-405267a7828f"
group by bookingCode, identityId
这给了我一个错误Expression self must depend only on group keys or aggregates
是否有任何方法,我可以得到整个json文件与组过滤后?
我希望得到类似这样的输出。
{
"event": "eb1518fb-81d1-49aa-9854-405267a7828f",
"identityId": "5eb44b44-d5ce-4473-815c-591a4ff1bea3",
"bookingCode": "ABCDE",
"status": "FAILURE",
"clientId": "MOBILE",
"created": "2021-04-15T04:16:35+00:00",
"locationType": "STORE"
},
{
"event": "eb1518fb-81d1-49aa-9854-405267a7828f",
"identityId": "q1244b44-d5ce-4473-815c-591a4ff1bea3",
"bookingCode": "BCD",
"status": "SUCCESS",
"clientId": "MOBILE,
"created": "2021-04-15T04:16:35+00:00",
"locationType": "STORE"
}
查询使用GROUP BY或Aggregates,那么投影只能包含
<- 组键/gh>骨料
- 组键或聚合的表达式 <
- 常量/gh>
假设每个组有较少的文档,您可以将它们聚合为ARRAY。如果需要不同的格式,通过数组下标获取或在父查询中使用UNNEST。如果它有很多使用覆盖查询和ARRAY_AGG文档键,那么父查询获取这些文档(流式传输文档)。
SELECT COUNT(1) AS cnt,
ARRAY_AGG(e) AS docs
FROM eventbooking AS e
WHERE e.event = "eb1518fb-81d1-49aa-9854-405267a7828f"
GROUP BY e.bookingCode, e.identityId;
如果您只需要组中最新创建的文档。
SELECT COUNT(1) AS cnt,
MAX([e.created,e])[1].*
FROM eventbooking AS e
WHERE e.event = "eb1518fb-81d1-49aa-9854-405267a7828f"
GROUP BY e.bookingCode, e.identityId;
查询永远不会返回文档。它总是返回一个Map
如果你需要文档(为了修改它),你可以查询Meta。匹配WHERE子句的文档的Id,然后遍历它们,获取、修改和保存文档。