GraphQL-为每个项目选择返回列表的不同字段

GraphQL-为每个项目选择返回列表的不同字段,graphql,apollo-client,Graphql,Apollo Client,假设我有以下查询: query getBooksQuery($userId: String) { getBooks(userId: $userId) { id description image user { email firstName lastName image } } } 假设我必须显示一个包含用户书籍的列表,并在列表上方显示作者详细信息。因为我是用用户ID查询的,所以我知道所有的书都属于

假设我有以下查询:

query getBooksQuery($userId: String) {
  getBooks(userId: $userId) {
    id
    description
    image
    user {
      email
      firstName
      lastName
      image
    }
  }
}
假设我必须显示一个包含用户书籍的列表,并在列表上方显示作者详细信息。因为我是用用户ID查询的,所以我知道所有的书都属于同一个用户。 因此,我不想为列表中的每本书获取相同的用户详细信息,而是只在响应中获取一次。 有没有办法声明我只想要第一本书的这些信息,即

或者这是在响应中包含两个对象的唯一方法,例如:

query getBooksQuery($userId: String) {
  getBooks(userId: $userId) {
    books {
      id
      description
      image
    }
    user {
      email
      firstName
      lastName
      image
    } 
  }
}
不幸的是,对于第二个解决方案,即使它在这一点上更清晰,也需要服务器端工作来支持这个定制查询。所以我在想,使用当前的api是否仍然可行。 此外,ofc我可以做两个请求,一个为用户,一个为书籍,但我


我使用的是阿波罗,没有中继,但我在这一点上进行试验,因此,如果阿波罗不可行,但可行,否则我仍然感兴趣

您可以在一个请求中对两个“子查询”使用相同的参数

query getBooksQuery($userId: String) {
  getBooks(userId: $userId) {
    books {
      id
      description
      image
    }
  }
  getUsers(userId: $userId) {
    user {
      email
      firstName
      lastName
      image
    } 
  }
}

这种不同分解器的组合方式改变了生活!难以置信的突变也会发生同样的情况?是的,突变是按顺序处理的