Фильтрация результатов в GraphQL с помощью PostGraphile

Я пытаюсь обернуть голову вокруг GraphQL, и я использую PostGraphile, чтобы легко и быстро сопоставить мою базу данных PostgreSQL и раскрыть ее с помощью GraphQL. Однако я долгое время застревал на некоторых вещах, которые в простом SQL можно было бы сделать за считанные минуты -

Во-первых, я пытаюсь получить все записи из своей базы данных после определенной даты, пока не смог, и в итоге получаю записи все, что крайне неэффективно.

Во-вторых, я хотел бы получить все записи, в которых поле, допускающее значение NULL, не является нулевым (то есть, только если в нем что-то есть, оно будет отображаться в результатах GraphQL)

Если бы кто-нибудь мог пролить свет на то, как это сделать, или указать мне на хороший учебник, в котором простым способом объясняется, как писать собственные функции фильтрации, было бы здорово.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
5
0
1 386
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

PostGraphile имеет небольшой, но постоянно растущий список плагины сообщества; для ваших нужд вам, вероятно, понадобится postgraphile-плагин-соединение-фильтр, который добавляет ряд фильтров к соединениям PostGraphile, которые вы ожидаете (меньше, больше, в списке, а не в списке и / или / не, например, содержит и т. д.). Также можно реализовать свои собственные плагины или достичь этой цели с помощью индивидуальные запросы.

Спасибо, @Benjie! Это именно то, что я в итоге сделал, сработало как шарм!

Jonathan Perry 26.04.2018 15:26

Чтобы расширить ответ @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: // локальный: 5000 / graphiql. Вы можете запускать такие запросы, как

{
  allProperties(first: 5, filter: {
    appraisedValue: {lessThan: 100000}
  }) {
    nodes {
      propertyId
      appraisedValue
      acres
    }
  }
}

Примечание. В документации на https://www.graphile.org/postgraphile/exnding/ говорится, что вы можете просто указать имя пакета npm, но, похоже, это не работает в Windows.

Спасибо, что расширили мой ответ ? Вам не нужно использовать полный путь, если вы установили из npm, вы можете просто использовать --append-plugins postgraphile-plugin-connection-filter; полный путь необходим только в том случае, если вы используете локальный модуль (потому что мы используем require(...) для его загрузки).

Benjie 02.11.2018 13:05

Спасибо @Benjie и за вашу работу над postgraphile - это отличная библиотека!

Brian Burns 04.11.2018 14:18

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