Hasura:如何过滤内部数组
Hasura: How to filter inside arrays
我有一个具有以下架构的 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 中所有的滤镜组合,但这似乎不可行?你能帮我吗?
你应该可以在 hasura 中使用 computed fields 来做到这一点。
像这样创建一个函数,它从推荐 table 中获取一行作为输入
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$
然后将此函数添加为计算域。此计算字段将显示为推荐中的字段。
使这有点复杂的是使用数组来存储文章的推荐。如果 table 的模式改为(article_id text,推荐 text),您可能有推荐过滤器就像你对 article_id.
所做的一样
我有一个具有以下架构的 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 中所有的滤镜组合,但这似乎不可行?你能帮我吗?
你应该可以在 hasura 中使用 computed fields 来做到这一点。
像这样创建一个函数,它从推荐 table 中获取一行作为输入
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$
然后将此函数添加为计算域。此计算字段将显示为推荐中的字段。
使这有点复杂的是使用数组来存储文章的推荐。如果 table 的模式改为(article_id text,推荐 text),您可能有推荐过滤器就像你对 article_id.
所做的一样