GraphQL条件查询

时间:2018-09-15 17:45:23

标签: node.js express graphql graphiql

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

在文档中找不到类似的内容...

2 个答案:

答案 0 :(得分:2)

这是可能的,必须有所不同。您的查询将不是有效的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之类的示例项目,则这些项目没有内置过滤器。

答案 1 :(得分:1)

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

在您的graphql文件中

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

usersQuery(ageLimit: Int): [users]

还可以发送'>','<','='作为参数。好像也是

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

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