14

我是 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
      }
    }

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

4

2 回答 2

11

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

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

或者更简单:

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

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

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

于 2018-09-15T19:08:39.040 回答
3

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

在你的 graphql 文件中

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

usersQuery(ageLimit: Int): [users]

您也可以发送 '>' 、 '<' 、 '=' 作为参数。好像也是这样

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

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

于 2018-09-19T07:52:00.250 回答