Gatsby GraphQL不同字段OR查询报错:Field "OR"未定义
解决Gatsby GraphQL查询中OR运算符的使用问题
嘿,我来帮你搞定这个问题!你的查询里有两个关键问题导致了报错,咱们一步步修正:
1. 逻辑运算符的名称用错了
你用了大写的OR,但Gatsby的FileFilterInput类型里定义的逻辑或运算符是小写的or——这就是报错Field "OR" is not defined by type FileFilterInput的直接原因。
虽然Sift本身支持$or语法,但Gatsby在GraphQL层做了适配,把Sift的操作符转换成了符合GraphQL命名规范的格式(去掉$,改用小写开头的命名)。
2. 字段匹配出现失误
你第二个条件里用atime字段去匹配文件路径,这明显不对——atime是文件的访问时间字段,不是存储路径的字段,应该还是用absolutePath来匹配第二个文件的路径。
修正后的正确查询
下面是调整后的可正常运行的GraphQL查询:
{ allFile(filter: { or: [ {absolutePath: { eq: "/Users/jesusyepes/Documents/webs/lego-gatsby/src/images/site-icon.jpg" }}, {absolutePath: { eq: "/Users/jesusyepes/Documents/webs/lego-gatsby/src/images/site-icon2.jpg" }} ] }) { nodes { absolutePath id } } }
额外拓展:复杂逻辑组合
如果需要更复杂的逻辑嵌套(比如or里套and),Gatsby的过滤器也完全支持,举个例子:
{ allFile(filter: { or: [ { and: [ {extension: {eq: "jpg"}}, {size: {gt: 1000}} ] }, {absolutePath: {eq: "/path/to/specific/file.png"}} ] }) { nodes { absolutePath extension size } } }
内容的提问来源于stack exchange,提问作者Chux
相关产品推荐
相关产品推荐

