是否可以根据条件返回GraphQL中的字段?

是否可以根据条件返回GraphQL中的字段?,graphql,apollo,react-apollo,Graphql,Apollo,React Apollo,使用GraphQL,是否可以根据条件返回一些字段?例如: [{ name: "Foo", age: 38 }, { name: "Bar", age: 50 }] 我希望总是返回name,但仅当name是Foo时才返回age。结果如下: [{ name: "Foo", age: 38 }, { name: "Bar" }] 在类型定义中,可以设置类型的必需和非必需属性。例如,您的类型可以定义为: type Person { na

使用GraphQL,是否可以根据条件返回一些字段?例如:

[{
    name: "Foo",
    age: 38
}, 
{
    name: "Bar",
    age: 50
}]
我希望总是返回
name
,但仅当name是
Foo
时才返回
age
。结果如下:

[{
    name: "Foo",
    age: 38
}, 
{
    name: "Bar"
}]

在类型定义中,可以设置类型的必需和非必需属性。例如,您的类型可以定义为:

type Person {
  name: String!
  age: Int
}
您将有一个查询扩展,它沿着以下几行定义:

extend type Query {
  getPeople: [Person]
}
您将有逻辑返回不同的部分,这将是您的解析器代码。可能是这样的:

getPeople(obj, input, context) {
  // Make a request for the information from db or wherever it is stored
  // The sql or api request can do the filtering, if not it can be done after it's saved
  const people = context.Users.get.People();
  // Map over fields for expected return per user based on logic
  const filteredPeople = people.map(person => {
    if (person.name === "Foo") {
      return { name: person.name, age: person.age }
    } else {
      return { name: person.name };
    }
  });
  return filteredPeople;
};

简而言之,解析器允许您修改返回的信息

GraphQL支持可选字段和必填字段,您能解释一下您的意思吗?我想使用一个条件检索某些字段的数据,例如:query{users{name age@include(if:…)}我只想在名称为“Foo”时返回字段年龄。返回值应为:[{name:“Foo”,age:38},{name:“Bar”}]