【问题标题】:Hasura: How to filter inside arraysHasura:如何过滤数组内部
【发布时间】: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 中尝试了所有过滤器组合,但这似乎不可能?你能帮帮我吗?

【问题讨论】:

    标签: graphql 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 一样为推荐设置过滤器。

    【讨论】:

      猜你喜欢
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      相关资源
      最近更新 更多