Hasura:如何过滤数组内部
Posted
技术标签:
【中文标题】Hasura:如何过滤数组内部【英文标题】:Hasura: How to filter inside arrays 【发布时间】:2021-05-21 04:13:15 【问题描述】:我有一个具有以下架构的 Postgres 数据库:
“article_id”类型:文本
“推荐”类型:文本[]
示例行如下所示:
“xxxx1”,[“xxxx2”,“xxxx3”,“xxxx5”]
现在在 Hasura 中,我可以过滤关于 article_id 的推荐,例如:
query get_recommendations
recommendations(limit: 10, where: article_id: _eq: "xxxx1")
recommendations
这会给我 ["xxxx2", "xxxx3", "xxxx5"]
但是我将如何从推荐数组中过滤特定的推荐?
基本上我想获得关于article_id“xxxx1”的推荐,而不是推荐“xxxx3”。
结果应该是 ["xxxx2", "xxxx5"]。
我在 Hasura 中尝试了所有过滤器组合,但这似乎不可能?你能帮帮我吗?
【问题讨论】:
【参考方案1】:您应该可以在 hasura 中使用 computed fields 来执行此操作。
像这样创建一个函数,它将推荐表中的一行作为输入
CREATE FUNCTION public.filtered_recommendations(rec_row recommendations, recommendations_to_filter text[])
RETURNS json
LANGUAGE sql STABLE
AS $function$
select ( select json_agg(unnest) AS filtered_recommendations FROM UNNEST(rec_row.recommendations) where unnest <> ALL(recommendations_to_filter) ) FROM recommendations
$function$
然后将此函数添加为计算域。此计算字段将显示为推荐中的字段。
让这有点复杂的是使用数组来存储文章的推荐。如果表的架构改为(article_id text,推荐 text),则您可以像使用 article_id 一样为推荐设置过滤器。
【讨论】:
以上是关于Hasura:如何过滤数组内部的主要内容,如果未能解决你的问题,请参考以下文章