GraphQL在一个请求中进行多个查询

时间:2018-02-16 22:35:09

标签: graphql

我的数据库中有一些用户创建的组。每个组中都有多个成员。这就是一个典型的群体:

{
    "groupName": "some-group-name",
    "userIds": ["001", "002", "003"]
}

我的数据库中还有一个单独的用户节点。这就是用户的样子:

{
    "id": "001",
    "userName": "some-unique-username"
}

我想列出每个组及其成员。所以,它将是:

  • 1组

    • user1 id; user1名称;
    • user2 id; user2 name;
  • 组2

    • user3 id; user3 name;
    • user4 id; user4 name;

依旧......

如何获取这些组及其用户ID并通过id查询用户并返回包含所有数据的单个JSON只有一个请求?(/ p>)

现在我只是抓取一些数量的组并迭代每个组的userIds并分别向每个用户发送请求。 我不是在询问分页或简单的查询,我只想让每个小组和这些小组中的用户。

2 个答案:

答案 0 :(得分:3)

自己想出来。

我需要做的是创建一个单独的解析器来获取每个组的成员:

resolvers: {
    ...
    Group: {
        members: (group, _, context) => group.members.map(memberId => context.db.findUserById(memberId)
    }
    ...
}

父组对象作为第一个参数传递给解析器,因此当我查询:

{
    groups(count: 10){
        name
        members {
            name
        }
    }
}

它返回前10个组的名称及其成员'名。

答案 1 :(得分:1)

使用以下架构

type User {
   name: String
   firstName: String
   location: String
}

type Group {
   groupname:String!
   users:[User!]
}

type Query {
   groups:[Group!]
   group(name: String): Group
}

以下查询:

{
groups
 {
  groupname
  users {
       name
       firstName
       location
  }
 }
}

可以返回

{
  { name: "group1",
    users: [{name:"user1", firstName:"firstName1", location:"Localtion1"},
    {name:"user2", firstName:"firstName2", location:"Localtion2"}]
  },
  { name: "group2",
    users: [{name:"user1", firstName:"firstName1", location:"Localtion1"}]
  },
  ...etc..
}

希望这有帮助,