Как запустить запрос фильтра GraphQL для типа поля ARRAY в Hasura?

Я пытаюсь выполнить запрос фильтра GraphQL для типов полей массива, например, для типа текстового поля ARRAY.

В следующем примере сценария:

СОЗДАТЬ СТОЛ

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

И мы можем отфильтровать поле текстового массива одним из следующих способов:

ВЫБЕРИТЕ ЗАЯВЛЕНИЕ с СОСТОЯНИЕМ для типа ARRAY

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']
         }
      ]
    }
  }
}

Может кто-нибудь дать мне несколько советов или предложений о том, как добиться подобных результатов для типов полей ARRAY в Hasura?

2 ответа

Я думаю, что вы не можете использовать массив непосредственно в консоли Hasura. Вы должны использовать jsonb вместо. Это более уместно, так как вы можете использовать _append, _prepend, _delete_key...

Но, кажется, вы можете использовать Array с хасурой. Если ваша схема взята из внешнего сервиса, вход для массива должен быть литералом. Для столбца типа tags[] входное значение должно быть строкой вроде: "{teamplayer,punctual}", Это шоу Array работает в postgres.

Итак, ваша мутация будет:

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

ManUtopiK никто не спрашивал как вставлять, он спрашивал как фильтровать список, потому что там и проблемы. Решение состоит в том, чтобы использовать либо sql-запросы, либо, если вы хотите использоватьgraphql, используйте postgraphile.

Другие вопросы по тегам