GraphQL 按键值过滤数据(例如,用户年龄必须为 31)

Posted

技术标签:

【中文标题】GraphQL 按键值过滤数据(例如,用户年龄必须为 31)【英文标题】:GraphQL filter data by key values (e.g. users age must be 31) 【发布时间】:2018-02-20 21:12:31 【问题描述】:

我是 GraphQL 新手,遇到一个相当简单的问题,我还没有找到相关文档。

我唯一想做的就是从 JSON 中获取用户列表,这些用户的 age 键设置为 31。我可以通过以下方式轻松获得所有用户:


  user 
    name
    age
  

但我只想要 31 岁的用户,而我认为我需要做的,这是行不通的,是:


  user(age: 31) 
    name
    age
  

我只是得到相同的结果,那么我需要做什么来启用age: 31“过滤器”?

架构

var MyGraphQLSchema = buildSchema(`
  type Query 
    user(age: Int): [User]
  
  type User 
    id: Int
    name: String
    age: Int
  
`);

JSON 数据

var root = 
  "user": [
    
      "id": 1,
      "name": "binni",
      "age": 31
    ,
    
      "id": 2,
      "name": "viddi",
      "age": 31
    ,
    
      "id": 3,
      "name": "mási",
      "age": 32
    
  ]

GraphQL 服务器

graphqlHTTP(
  schema: MyGraphQLSchema,
  rootValue: root,
  graphiql: true
)

我正在使用graphql.js 和koa-graphql(类似于express-graphql)。

查询结果


  "data": 
    "user": [
      
        "name": "binni",
        "age": 31
      ,
      
        "name": "viddi",
        "age": 31
      ,
      
        "name": "mási",
        "age": 32
      
    ]
  

【问题讨论】:

【参考方案1】:

您需要将 user 实现为 ECMAScript 函数,而不是数组。

var users = [
      
        "name": "binni",
        "age": 31
      ,
      
        "name": "viddi",
        "age": 31
      ,
      
        "name": "mási",
        "age": 32
      
    ]


var root = 
  "user": (age) =>
            age === null? users:
                          users.filter(user => user.age === age)

参考http://graphql.org/graphql-js/passing-arguments/。

【讨论】:

以上是关于GraphQL 按键值过滤数据(例如,用户年龄必须为 31)的主要内容,如果未能解决你的问题,请参考以下文章

v-for列表过滤和排序

按键值过滤 CKQuery

php安全篇值过滤用户输入的参数(转)

如何通过 GraphQL 中的过滤器和顺序动态创建/获取数据?

MySQL必知必会---过滤数据

GraphQL 不允许查询不同的字段