Фильтрация результатов в 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 это не работает.

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