Tengo algunos grupos creados por usuarios en mi base de datos. Cada grupo tiene varios miembros. Así es como se ve un grupo típico:
{
"groupName": "some-group-name",
"userIds": ["001", "002", "003"]
}
También tengo un nodo separado de usuarios en mi base de datos. Así es como se ve un usuario:
{
"id": "001",
"userName": "some-unique-username"
}
Quiero enumerar todos los grupos y sus miembros. Entonces, sería:
grupo 1
- ID de usuario1; nombre de usuario1;
- ID de usuario2; nombre de usuario2;
Grupo 2
- ID de usuario3; nombre de usuario3;
- ID de usuario4; nombre de usuario4;
Y así sucesivamente...
¿Cómo sería posible (en todo caso) obtener estos grupos y sus ID de usuario y también consultar usuarios por ID y devolver un solo JSON que contenga todos los datos solo con una solicitud?
En este momento solo estoy obteniendo una cierta cantidad de grupos, iterando sobre el userIds
de cada uno de ellos y enviando una solicitud para cada usuario por separado. No estoy preguntando sobre paginación o consultas simples, solo quiero que todos los grupos y los usuarios estén dentro de esos grupos.
2 respuestas
Lo descubrí yo mismo.
Lo que tenía que hacer era crear un solucionador separado para buscar miembros de cada grupo:
resolvers: {
...
Group: {
members: (group, _, context) => group.members.map(memberId => context.db.findUserById(memberId)
}
...
}
El objeto del grupo principal se pasa como el primer argumento al solucionador, así que cuando consulto:
{
groups(count: 10){
name
members {
name
}
}
}
Devuelve los nombres de los primeros 10 grupos junto con los nombres de sus miembros.
Con el siguiente esquema,
type User {
name: String
firstName: String
location: String
}
type Group {
groupname:String!
users:[User!]
}
type Query {
groups:[Group!]
group(name: String): Group
}
La siguiente consulta:
{
groups
{
groupname
users {
name
firstName
location
}
}
}
Podría volver
{
{ 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..
}
Espero que esto ayude,
Preguntas relacionadas
Nuevas preguntas
graphql
GraphQL es una tecnología API diseñada para describir las dependencias de datos complejas y anidadas de las aplicaciones web modernas. A menudo se considera una alternativa a SOAP o REST