使用 PostGraphile 在 GraphQL 中过滤结果

Filtering results in GraphQL using PostGraphile

我正在尝试全神贯注于 GraphQL,虽然我使用 PostGraphile 轻松快速地映射我的 PostgreSQL 数据库并使用 GraphQL 公开它。但是,我在一些简单的 SQL 几分钟内就能完成的事情上停留了很长时间 -

首先,我试图在定义的日期之后从我的数据库中获取所有记录,到目前为止无法做到这一点,我最终得到了 all 条记录,这是效率极低。

其次,我想获取其中可空字段不为空的所有记录(意思是,只有其中包含某些内容,它才会显示在 GraphQL 结果中)

如果有人能阐明如何做到这一点,或者给我指出一个很好的教程,该教程以简单的方式解释了如何编写自定义过滤函数,那就太好了。

PostGraphile 的 community plugins; for your needs you probably want postgraphile-plugin-connection-filter which adds a number of filters to PostGraphile connections that you'd expect (less than, greater than, in a list, not in a list, and/or/not, like, contains, etc). It's also possible to implement your own plugins, or to achieve this goal via custom queries.

列表虽小但不断增加

要扩展@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

然后您可以使用位于 http://localhost:5000/graphiql 的 graphiql 端点尝试新过滤器。您可以 运行 查询

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

注意:https://www.graphile.org/postgraphile/extending/ 的文档说您可以只提供 npm 包的名称,但这似乎不适用于 Windows。