为什么这不可能?从某种意义上讲,我似乎无法访问通过内部片段(例如... on File
{
books: allMarkdownRemark(filter: {parent: {sourceInstanceName: {eq: "whatever"}}}) {
totalCount
edges {
node {
parent {
... on File {
sourceInstanceName
}
}
}
}
}
}
错误:未按NodeFilterInput类型定义字段
答案 0 :(得分:1)
您可以将其与常规函数参数和返回结果进行比较。在graphQL中,两者都是严格定义/键入的。
在这种情况下,对于查询allMarkdownRemark
,您有
allMarkdownRemark(
filter: MarkdownRemarkFilterInput
limit: Int
skip: Int
sort: MarkdownRemarkSortInput
): MarkdownRemarkConnection!
...因此可能的参数只有filter
,limit
,skip
和sort
。参数filter
也定义了形状-必须为MarkdownRemarkFilterInput
类型。您只能将为此类型定义的属性用于filter
参数。
这是设计使然,这是设计人员创建解析器的方式以及他关于如何以及如何处理参数的意图。
这就像分页一样-您不必使用任何结果字段作为参数,因为skip
和limit
用于记录级别。这样,这些参数根本就与字段无关。它们用于解析器中的某些逻辑。 filter
参数也用于逻辑...但是选择并涵盖过滤用例是deleveloper的决定。
不可能覆盖所有已处理数据层和属性上的所有可想象的过滤器,...对于parent
,您只能使用children
,id
,internal
和{ {1}}属性和子属性(您可以在操场上浏览它们)。
当然,仅仅扩展类型定义以使其与另一个参数一起使用是不够的-关于处理它的代码。
如果需要其他过滤逻辑,则可以为文件类型或其他来源编写自己的解析器(或修改分叉的gatsby项目)。