首页 文章

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

提问于
浏览
1

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

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

{
  user {
    name
    age
  }
}

但我只想要年龄在31岁以及我认为我需要做的事情,这是行不通的:

{
  user(age: 31) {
    name
    age
  }
}

我得到了相同的结果,那么我需要做些什么来启用 age: 31 "filter"?

架构

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 Server

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

我正在使用graphql.jskoa-graphql(与express-graphql类似) .

查询结果

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

1 回答

  • 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/以供参考 .

相关问题