graphQL 连接公共列

Sil*_*son 6 join graphql graphql-js

我们如何在 graphQL 中的公共列上进行数据连接。

例如在 SQL 中:选择 t.name 和 z.address,其中 t.id=z.id;

这是如何由 graphQL 查询管理的。

And*_*son 5

GraphQL 查询如何管理它?

简短的回答:它不是(托管的)。您必须将其写入解析器中。

您的 GraphQL 模式基本上只是表示节点的类型和表示边的字段的声明。GraphQL 是查询该图的语言。在架构中的每个边上,您编写一个函数,用于在查询遍历该边时如何获取数据。该函数称为“解析器”,您可以将几乎任何代码放入解析器中,只要它返回有效数据即可。这意味着 GraphQL完全、绝对独立于数据库。您的解析器负责与您的数据库对话。

因此,当涉及到 SQL 和连接时,进行查询的问题完全是 API 开发人员的责任。GraphQL 对 SQL 或连接一无所知,因此这本质上是您必须编写的应用程序的自定义逻辑。事实证明,构建 SQL 查询来解析 GraphQL 查询的数据是非常困难的,除非遇到急于获取太多数据或“N+1”问题等问题。

开源社区中出现了一些工具来帮助解决这个问题。以下是我在 Node.js 领域推荐的一些内容:

  • 数据加载器 - 一种与数据库无关的工具,可批量查询并缓存单个记录。
  • Join Monster - 用于高效数据检索和查询批处理的 SQL 定制工具。它检查每个查询和您的架构并动态生成 SQL 查询。

免责声明:我是《Join Monster》的共同创作者。