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)的主要内容,如果未能解决你的问题,请参考以下文章