【问题标题】:GraphQL "not equal" operator?GraphQL“不等于”运算符?
【发布时间】:2016-07-29 15:10:39
【问题描述】:

我有一个用于列出一堆项目的 GraphQl API,我可以完美地查询它等等。 但现在我想查询该列表的一个子集,其中一个属性可以具有“除一个特定值之外的所有可能值”。

例如,我想查询如下内容:

{
  items(status: !"Unwanted"){
    id
  }
}

那个感叹号显然不起作用,但它说明了我所追求的。 在网上找不到这方面的任何信息。

有人知道这样做的方法吗? 我真的很讨厌必须枚举所有可能的想要的值,而不是仅仅排除一个不需要的值。这将是非常糟糕的设计,并且不可扩展。

谢谢。

【问题讨论】:

    标签: graphql


    【解决方案1】:

    使用ne

    {
      items(filter: {status: {ne: "Unwanted"}}){
        id
      }
    }
    

    【讨论】:

    • status: {ne: "Unwanted"} 附近缺少filter: {}。这应该是items(filter: { status: {ne: "Unwanted"} })
    • 感谢您的回答!这在解析器端如何工作?
    【解决方案2】:

    如果您可以定义架构(实现服务器),那么您可以在items 字段中添加第二个参数,例如statusExcept。然后在 resolve 方法中检查是否设置了 status 或 statusExcept 并据此交付项目。

    如果服务器 API 是固定的,那么除了获取所有内容并在客户端进行过滤之外,您无能为力。

    【讨论】:

    • 感谢您的提示。我可以看到这将如何轻松工作。 GraphQL 真的没有“不”的概念吗?似乎是一个明显的遗漏。
    • @batijo GraphQL 没有搜索的概念,您必须使用 GraphQL 提供的工具(例如参数)来实现搜索。 GraphQL 只是一种语言规范,它对于搜索在特定 API 或应用程序中的工作方式保持中立。
    • 但确实如此!它是一种查询语言。它具有允许您搜索特定值的查询参数(但是它们可能由后台模式实现)。所以如果我可以寻找例如{ status: "New"},也就是status="New",为什么没有status的概念!= "New",例如:{ $not: { status: "New"} }?似乎很明显要添加。
    • @batjko 不是这样的 :) 当您执行 status: "New"您只需将参数传递给 GraphQL 解析函数。它可以用于搜索,但也可以用于其他目的。例如分页,选择所需的图像大小。对于这些论点,$not 没有多大意义。
    • 好点。我之前并没有真正将其视为“将参数传递给解析函数”,但这很有意义。我通常将其理解为“查询参数”以及该术语所暗示的所有内容。很公平。感谢您的解释,@freiksenet!
    【解决方案3】:

    使用 GraphQL 版本 4.3.2 语法已更改,您将需要使用 notIn

    {
      items(filter: {status: {notIn: "Unwanted"}}){
        id
      }
    }
    

    【讨论】:

    • 这不是 GraphQL。该“过滤器”参数必须作为架构的一部分进行自定义定义,并具有可以获取和应用该过滤器对象的自定义解析器。在 GraphQL 规范中查看这个被拒绝的提案:github.com/graphql/graphql-spec/issues/…
    猜你喜欢
    • 2011-05-04
    • 2012-09-03
    • 2014-03-22
    • 1970-01-01
    • 2012-11-28
    • 2011-08-05
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    相关资源
    最近更新 更多