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名称李>
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一样,客户机决定它想要什么…不幸的是,这仍然不能回答我的问题,但我自己解决了,并将尽快给出答案