6

我试图围绕 GraphQL 进行思考,但我使用 PostGraphile 轻松快速地映射我的 PostgreSQL 数据库并使用 GraphQL 公开它。但是,我在一些简单的 SQL 中只需几分钟就可以完成的事情被困了很长时间 -

首先,我试图在定义的日期之后从我的数据库中获取所有记录,到目前为止还不能这样做,我最终得到了所有效率极低的记录。

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

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

4

2 回答 2

7

PostGraphile 有一个小但不断增长的社区插件列表;根据您的需要,您可能需要postgraphile-plugin-connection-filter向您期望的 PostGraphile 连接添加许多过滤器(小于、大于、在列表中、不在列表中和/或/不是,例如, 包含等)。也可以实现自己的插件,或者通过自定义查询来实现这个目标。

于 2018-04-26T12:26:22.273 回答
3

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

于 2018-10-30T11:08:32.197 回答