Как запустить запрос фильтра 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.