Фильтрация результатов в GraphQL с использованием PostGraphile
Я пытаюсь обернуть голову вокруг GraphQL и использую PostGraphile, чтобы легко и быстро отобразить мою базу данных PostgreSQL и выставить ее с помощью GraphQL. Тем не менее, я застрял надолго на некоторых вещах, которые в простом SQL были бы делом нескольких минут -
Во-первых, я пытаюсь получить все записи из своей базы данных после определенной даты, пока не могу этого сделать, и в итоге получаю все записи, что крайне неэффективно.
Во-вторых, я хотел бы получить все записи, в которых поле NULL может иметь нулевое значение (то есть, только если в нем есть что-то, оно будет отображаться в результатах GraphQL).
Если бы кто-нибудь мог пролить некоторый свет на то, как это сделать, или указать мне хороший учебник, который объясняет простым способом, как написать пользовательские функции фильтрации, это было бы здорово.
2 ответа
PostGraphile имеет небольшой, но растущий список плагинов для сообществ; для ваших нужд вам, вероятно, понадобится https://github.com/graphile-contrib/postgraphile-plugin-connection-filter, который добавляет несколько фильтров к соединениям PostGraphile, которые вы ожидаете (меньше, больше, чем в списке, не в списке, и / или / нет, например, содержит и т. д.). Также возможно реализовать свои собственные плагины или достичь этой цели с помощью пользовательских запросов.
Чтобы расширить ответ @Benjie, сначала установите плагин:
yarn add postgraphile-plugin-connection-filter
Затем вы можете запустить postgraphile из консоли:
postgraphile --append-plugins <plugin path> --connection <dbname>
например, в Linux:
postgraphile --append-plugins `pwd`/node_modules/postgraphile-plugin-connection-filter/index.js --connection mydb
или в Windows:
postgraphile --append-plugins /users/bburns/desktop/moveto/site/node_modules/postgraphile-plugin-connection-filter/index.js --connection mydb
Затем вы можете попробовать новые фильтры, используя конечную точку graphiql по адресу http://localhost:5000/graphiql. Вы можете запускать запросы как
{
allProperties(first: 5, filter: {
appraisedValue: {lessThan: 100000}
}) {
nodes {
propertyId
appraisedValue
acres
}
}
}
Примечание. В документации по адресу https://www.graphile.org/postgraphile/extending/ говорится, что вы можете просто указать имя пакета npm, но в Windows это не работает.