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

GraphQL在一个请求中执行多个查询,graphql,Graphql,我的数据库中有一些由用户创建的组。每个组中都有多个成员。这就是一个典型的群体的样子: { "groupName": "some-group-name", "userIds": ["001", "002", "003"] } { "id": "001", "userName": "some-unique-username" } 我的数据库中还有一个单独的用户节点。这就是用户的样子: { "groupName": "some-group-name",

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

{
    "groupName": "some-group-name",
    "userIds": ["001", "002", "003"]
}
{
    "id": "001",
    "userName": "some-unique-username"
}
我的数据库中还有一个单独的用户节点。这就是用户的样子:

{
    "groupName": "some-group-name",
    "userIds": ["001", "002", "003"]
}
{
    "id": "001",
    "userName": "some-unique-username"
}
我想列出每个小组及其成员。因此,它将是:

  • 第一组

    • user1id;user1名称
    • user2id;user2名称
  • 第2组

    • user3id;user3名称
    • user4id;user4名称
等等

如何(如果有的话)获取这些组及其用户id,并通过id查询用户,并仅通过一个请求返回一个包含所有数据的JSON

现在,我只是获取一些组并迭代每个组的
userid
,然后分别为每个用户发送请求。
我不是问分页或简单的查询,我只是想得到每个组以及这些组中的用户。

使用以下模式

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..
}

希望这对您有所帮助,

使用以下模式

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..
}
希望这有帮助,

我自己解决了

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

resolvers: {
    ...
    Group: {
        members: (group, _, context) => group.members.map(memberId => context.db.findUserById(memberId)
    }
    ...
}
父组对象作为第一个参数传递给解析器,因此在查询时:

{
    groups(count: 10){
        name
        members {
            name
        }
    }
}
它返回前10个组的名称及其成员的姓名。

我自己解决了这个问题

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

resolvers: {
    ...
    Group: {
        members: (group, _, context) => group.members.map(memberId => context.db.findUserById(memberId)
    }
    ...
}
父组对象作为第一个参数传递给解析器,因此在查询时:

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

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

您的问题很难理解。不管采用哪种技术,这就是您想要的f(userid)->group吗?那么user(id:“xxx”){username group}@OlivierRefalo做了一次编辑,是更清楚了还是我应该详细说明一下?@OlivierRefalo>那么user(id:“xxx”){username group}用户节点不存储它们所在的组呢。组存储我要查询的用户ID。您的问题很难理解。不管采用哪种技术,这就是您想要的f(userid)->group吗?那么user(id:“xxx”){username group}@OlivierRefalo做了一次编辑,是更清楚了还是我应该详细说明一下?@OlivierRefalo>那么user(id:“xxx”){username group}用户节点不存储它们所在的组呢。组存储我要查询的用户id。我要问的是,是否可以使用用户id获取用户信息,而不单独发送每个请求。在这种情况下,我仍然必须这样做。因此,如果我想列出组中每个用户的姓名,我仍然需要发送另一个请求来获取每个用户的姓名。我不能只通过一个查询来完成吗?修改为符合要求。一个请求,graphql就像sql一样,客户端决定它想要什么…不幸的是,这仍然不能回答我的问题,但我自己想出来了,并将尽快发布一个答案。我想问的是,是否可以使用用户id获取用户信息,而不单独发送每个请求。在这种情况下,我仍然必须这样做。因此,如果我想列出组中每个用户的姓名,我仍然需要发送另一个请求来获取每个用户的姓名。我不能只通过一个查询来完成吗?修改为符合要求。一个请求,graphql就像sql一样,客户机决定它想要什么…不幸的是,这仍然不能回答我的问题,但我自己解决了,并将尽快给出答案