如何在graphql查询过滤器中使用OR / AND或制作不区分大小写的过滤器?

Tay*_*tin 17 graphql gatsby

就像帖子中的问题一样,我需要能够搜索 3 种可能的情况。我需要全部大写,或小写,或正常大小写。

如果这是不可能的,有没有办法做一个不区分大小写的过滤器?

  allMarkdownRemark(filter: { brand: { eq: $normalBrand } }) { //==> Need more here
        edges {
            node {
                webImages {
                    url
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我发现有些人这样做:

filter: { OR: [
  {brand: { eq: $normalBrand }}, 
  {brand: { eq: $normalBrand2 }}, 
  {brand: { eq: $normalBrand3 }}
]}
Run Code Online (Sandbox Code Playgroud)

但它对我不起作用

Thy*_*ine 7

目前,graphql 本身没有内置任何使用不区分大小写搜索的内容,它完全基于 graphql 服务器正在运行的任何库,如果选择添加对此的支持。如果您可以修改 graphql 查询代码,您可以以某种方式将其添加到自己中,或者请求托管/构建该代码的人以某种方式添加该功能。

关于 OR,我怀疑我能说得比https://github.com/graphql/graphql-js/issues/585#issuecomment-262402544更好

GraphQL 不支持 AND/OR 运算符,这正是您在问题顶部提到的原因:它不映射到任何类型的存储。我认为要正确理解为什么它没有这些需要改变思维模型。我们认为 GraphQL 比数据库语言更类似于 RPC 语言。

为了帮助理解心理模型的转变,考虑编​​程语言中的函数调用等字段和参数是很有用的。所以假设我们问一个类似的 javascript 问题:为什么你不能输入:getCaseByStatus("open" OR "closed")?我认为答案是因为 JavaScript 不知道 OR 在这种情况下的含义。值"open"和是否应该"closed"以某种方式组合以产生另一个值?函数的执行是否应该getCaseByStatus以某种方式改变?JavaScript 不能确定 - 因为基于字段的过滤的概念不是 JavaScript 语义的一部分。...

  • 如果你不能问它问题,它就不是一种查询语言。 (2认同)