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.

所做的一样