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:如何过滤数组内部的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jq根据内部数组中的值过滤对象数组?

jq 过滤内部数组元素但返回整个 JSON

仅当变量不为空时,如何应用 Hasura `where` 过滤器?

使用 Ramda 过滤每个内部属性数组

$eq 内部过滤器不适用于数组字段 - Mongodb

hasura graphql-engine ha 以及自动缩放的一些参考资料