如何在graphql查询过滤器中使用OR / AND或使大小写不敏感的过滤器?

时间:2018-07-25 19:10:45

标签: graphql gatsby

就像帖子问的那样,我需要能够在3种可能的情况下进行搜索。我需要所有大写,小写或普通大写字母。

如果不可能的话,有办法代替不区分大小写的过滤器吗?

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

我发现有人这样做:

filter: { OR: [
  {brand: { eq: $normalBrand }}, 
  {brand: { eq: $normalBrand2 }}, 
  {brand: { eq: $normalBrand3 }}
]}

但这对我不起作用

3 个答案:

答案 0 :(得分:2)

目前,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语义的一部分。   ...

答案 1 :(得分:0)

正则表达式可以工作吗?像

  allMarkdownRemark(filter: { brand: { 
     regex: "/($normalBrand)|($normalBrand2)|($normalBrand3)/" 
  } }) { 
        edges {
            node {
                webImages {
                    url
                }
            }
        }
    }

答案 2 :(得分:0)

尝试使用小写“或”进行过滤

filter: { or: [{brand: { eq: $normalBrand }}, {brand: { eq: $normalBrand2 }},{brand: { eq: $normalBrand3 }}]}