GraphQL:获取特定实现的子级

GraphQL:获取特定实现的子级,graphql,Graphql,我得到了一个带有“children”字段的GraphQL对象。 该字段的类型为“X”,有两种不同的实现,“Y”和“Z” 因此,当我进行查询时,我可以这样做: { fieldOne fieldTwo children { ... on Y { fieldOne fieldTwo } ... on Z { fieldOne } } }

我得到了一个带有“children”字段的GraphQL对象。 该字段的类型为“X”,有两种不同的实现,“Y”和“Z”

因此,当我进行查询时,我可以这样做:

{
    fieldOne
    fieldTwo
    children {
        ... on Y {
            fieldOne
            fieldTwo
        }
        ... on Z {
            fieldOne
        }
    }
}
我有没有办法只让孩子们使用Y实现?

因为如果我这样做:

{
    fieldOne
    fieldTwo
    children {
        ... on Y {
            fieldOne
            fieldTwo
        }
    }
}
我将得到一个如下所示的对象:

{
    fieldOne
    fieldTwo
    children [
        {}, // Z implementation
        {}, // Z implementation
        {
            fieldOne,
            fieldTwo
        }, // Y implementation
    ]
}

谢谢:)

您看到的是预期行为。从:

片段可以在选择集中内联定义。这样做是为了根据字段的运行时类型有条件地包括字段

键入条件,如
。。。在Y上
只是一种根据运行时类型过滤解析哪些字段的方法。它们不是筛选实际结果列表的方法。事实上,GraphQL中没有内置的过滤功能

为了过滤列表以仅包含某些类型(或基于任何其他条件),相关字段需要具有某种过滤参数和解析器逻辑,以使用它实际执行过滤


如果您使用的是第三方API,并且模式不支持过滤,那么作为客户机,除了事后处理响应之外,您没有什么可以做的。

您看到的是预期的行为。从:

片段可以在选择集中内联定义。这样做是为了根据字段的运行时类型有条件地包括字段

键入条件,如
。。。在Y上
只是一种根据运行时类型过滤解析哪些字段的方法。它们不是筛选实际结果列表的方法。事实上,GraphQL中没有内置的过滤功能

为了过滤列表以仅包含某些类型(或基于任何其他条件),相关字段需要具有某种过滤参数和解析器逻辑,以使用它实际执行过滤

如果您使用的是第三方API,而模式不支持过滤,那么作为客户机,除了事后处理响应之外,您没有什么可以做的