【问题标题】:GraphQL Conditional QueriesGraphQL 条件查询
【发布时间】:2019-02-20 04:08:09
【问题描述】:

我是 GraphQL 的新手,我想知道是否有一种简单的方法可以使用“动态条件”进行查询。

例如,在 GraphiQL 上我可以查询:

query {
  users{
    name
    age
  }
}

它会给我一个所有用户的列表

{
  "data": {
    "users": [
      {
        "name": "Luis Coimbra",
        "age": 15
      },
      {
        "name": "Sebastião Campagnucci",
        "age": 50
      },
      {
        "name": "Giovana Ribeiro",
        "age": 30
      }
    ]
  }
}

但是有没有一种简单的方法让我只带 18 岁以上或任何其他年龄的用户?

预期的解决方案是:

query {
      users{
        name
        age > 18
      }
    }

在文档中没有找到类似的东西...

【问题讨论】:

  • 最简单 - 通过参数/变量,如minAgemaxAge - 在定义此可选参数时,它的解析器角色有条件地“反应”(使用)。
  • 好问题。从答案来看,它并不优雅

标签: node.js express graphql graphiql


【解决方案1】:

您应该将年龄过滤器作为参数发送。您可以尝试以下方法:

在你的 graphql 文件中

type users {
 name: String,
 age: Int,
 ...
}

usersQuery(ageLimit: Int): [users]

您也可以发送 '>' 、 '

usersQuery(ageLimit: Int, ageOperator: String): [users]

并且您应该使用这些运算符配置解析器 where 语句。希望对你有帮助。

【讨论】:

    【解决方案2】:

    这是可能的——它必须有所不同。您的查询不是有效的 GQL 查询。这样的事情会:

        {
          users(where: {age: { $gt: 18 }}){ #inspired by mongoDB query api
            name
            age
          }
        }
    

    或者更简单:

       {
         users(where: {age: ">18"}}){
            name
            age
          }
       }
    

    当然,无论哪种方式,后端的解析器都需要在 users 字段上期待这个 where 参数,并在传递时相应地构造 DB 查询。您不会在 GraphQL 文档中找到这一点,因为 GraphQL 本身并不关心这一点。它只展示了如何使用 GraphQL 的特性。

    如果您尝试过示例项目,例如 star was api,则这些项目没有内置任何过滤功能。

    【讨论】:

      猜你喜欢
      • 2023-01-25
      • 2019-09-12
      • 1970-01-01
      • 2020-08-15
      • 2018-09-29
      • 2021-06-06
      • 2019-01-22
      • 2020-10-22
      • 2021-02-09
      相关资源
      最近更新 更多