如何对 Hasura 中的 ARRAY 字段类型运行 GraphQL 过滤器查询?

Posted

技术标签:

【中文标题】如何对 Hasura 中的 ARRAY 字段类型运行 GraphQL 过滤器查询?【英文标题】:How to run GraphQL filter query on an ARRAY field type in Hasura? 【发布时间】:2019-11-23 05:19:09 【问题描述】:

我正在尝试对数组字段类型运行 GraphQL 过滤器查询,例如文本 ARRAY 字段类型。

在以下示例场景中:

创建表

CREATE TABLE Employee (
    firstName       text,
    lastName        text,    
    tags            text[]
);

我们可以通过以下方式之一过滤文本数组字段:

在数组类型上使用 CONDITION SELECT STATEMENT

SELECT * FROM Employee WHERE tags @> ARRAY['teamplayer']::varchar[]

这在 PostGres 和 Postgraphile 中隐式有效。

在 Postgraphile GraphQL 上,我们可以查询上表如下:

查询


  allEmployees(filter: tags: contains: "teamplayer") 
    nodes 
      firstName
      lastName
      tags
    
  

结果将是:

回应

  
  "data": 
    "allEmployees": 
      "nodes": [
         
             firstName: 'Russell'
             lastName: 'Dodds'
             tags: ['teamplayer', 'punctual']
         ,
         
             firstName: 'Emma'
             lastName: 'Samsin'
             tags: ['teamplayer']
         
      ]
    
  

有人可以给我一些关于如何在 Hasura 中的 ARRAY 字段类型上实现类似结果的参考或建议吗?

【问题讨论】:

您好,欢迎来到 ***!请查看How do I ask a good question? 并考虑编辑您的问题 - 如果您没有向我们提供您尝试过的任何代码,我们将无法帮助您,以便我们帮助您解决问题! @Jeffrey,感谢您的反馈。按建议编辑。 【参考方案1】:

我认为您不能直接在 Hasura 控制台中使用数组。您应该改用jsonb。更合适的是你可以使用_append_prepend_delete_key...

但您似乎可以将 Array 与 hasura 一起使用。如果您的架构来自外部服务,则数组的输入应该是文字。对于tags[] 类型的列,输入值必须是类似"teamplayer,punctual" 的字符串。就是这样Arrayworks in postgres。

所以你的突变将是:

mutation 
  insert_table(objects:
    tags: "teamplayer,punctual"
  ) 
    returning 
      tags
    
  

【讨论】:

以上是关于如何对 Hasura 中的 ARRAY 字段类型运行 GraphQL 过滤器查询?的主要内容,如果未能解决你的问题,请参考以下文章

比较 GraphQL Hasura 中的两个字段

Hasura:如何过滤数组内部

BigQuery 对数组类型的许多字段的最佳查询

如何从 iOS 中的 hasura graphql 查询中获取错误响应

如何仅查询这些对象,这些对象包含使用 Hasura 作为变量给出的数组中的每个元素?

如何从 NESTED 字段中的 ARRAY 中删除 STRUCT