首页 > 解决方案 > Gatsby graphql 或两个不同字段上的条件

问题描述

是否可以在 gatsby 的两个不同字段上添加 OR 运算符?

我正在尝试执行这样的查询:

{
    allFile(filter: {
        OR: [
            {absolutePath: {
                    eq: "/Users/jesusyepes/Documents/webs/lego-gatsby/src/images/site-icon.jpg"
                }},

            {atime: {
                    eq: "/Users/jesusyepes/Documents/webs/lego-gatsby/src/images/site-icon2.jpg"
                }},
        ]

    }) {
        nodes {
            absolutePath
            id
        }
    }
}

这会引发以下错误:字段 \"OR\" 不是由 FileFilterInput 类型定义的。

查看他们的文档,他们说“Gatsby 依靠 Sift 启用类似 MongoDB 的查询语法来进行对象过滤。”

在我看到的Sift文档中,支持 OR :

[
  { name: "Craig", state: "MN" },
  { name: "Tim", state: "MN" },
  { name: "Joe", state: "CA" }
].filter(sift({ $or: [{ name: "Craig" }, { state: "MN" }] }));

标签: gatsby

解决方案


不幸OR的是,在此答案时不支持(这里是所有受支持的运营商的列表

一种解决方法是使用具有 2 个别名的查询:

query {
  fileOne: allFile(filter: { ... }) { ... }
  fileTwo: allFile(filter: { ... }) { ... }
}

...然后在 JS 中手动合并它们。


推荐阅读