使用MongoDB的GraphQL中的多态数据结构

时间:2018-09-18 10:35:33

标签: mongodb data-structures polymorphism schema graphql

我需要在GraphQL(MongoDB作为数据库)中创建一个数据结构,该数据结构表示以下架构:

  • 账单可以有多个文章
  • 一个文章具有一个 article-group-number ,以及众多属性,其中100%取决于 article-group-number ,并且可能会有所不同这些群体之间的关系很大。

所以一篇文章可能看起来像这样:

{
article-group-number: 100,
length: 5.5
}

另一篇文章可能看起来像这样:

{
article-group-number: 101,
width: 2
}

甚至可能有一些文章引用了另一篇文章(但没有循环结构)。

我需要能够为每个商品编号创建和维护不同的验证规则(功能)。 我该怎么办?

我当时在考虑GraphQL中的 union 类型,但是这些类型只能在此时读取,而不能写入(通过“变异”)。 我是否应该将这些文章保存为纯JSON数据,并手动进行所有验证?通过这种方式,我将失去逻辑结构,因为在我看来,此JSON数据字段只是某种“混乱的数据”,因为通过GraphQL会丢失所有逻辑。

有没有更干净的方法?

1 个答案:

答案 0 :(得分:0)

两个选项:

您可以从GraphQL本身获取线索-架构中使用的__Type类型具有“种类”字段,并且有许多取决于类型的属性。例如,对象类型可以具有字段,而其他类型的类型则不能。 GraphQL只是将所有可能的属性放入__Type类型,并在它们不适用于该类型的类型时让它们采用空值。您可以做类似的事情,只是让您的文章具有所有可能的属性。

或者您可以使用文章类型的并集,也许全部实现一个通用的文章接口。对于突变来说,这实际上不是问题。由于变异位于与查询完全不同的命名空间中,因此它们可以做任何您想做的事情-变异的类型不必与查询的类型相同,实际上通常不是。

两种方法都有效。不过,第二种方法更复杂,因此,如果要执行此操作,请确保从中获得某种好处。