所以,如果可能的话,我正在努力做出GraphQL
这样的事情:
{
people {
_id
name
acted {
_id
title
coactors {
name
}
}
}
}
所以我正在做的事情,它是演员(人),然后获得他们演的电影,这很好。那么我正试图让那部电影中的合作演员参与其中。我正在考虑将当前演员的id作为参数传递给co-actors字段:
{
people {
_id
name
acted {
_id
title
coactors(actor: people._id) {
name
}
}
}
}
显然,我收到了一个错误,不知道是否可以在内部进行。
所以这是我的类型:
const MovieType = new GraphQLObjectType({ name: 'movie', fields: () => ({ _id: { type: GraphQLInt }, title: { type: GraphQLString }, tagline: { type: GraphQLString }, released: { type: GraphQLInt }, actors: { type: new GraphQLList(PersonType), resolve: (movie) => { return []; } }, coactors: { type: new GraphQLList(PersonType), args: { actor: { type: GraphQLInt } }, resolve: (movie, args) => { getCoActorsFor(movie, args.actor) // How can I do something like this .then((actors) => { return actors; }) } } }) }); const PersonType = new GraphQLObjectType({ name: 'person', fields: ()=> ({ _id: { type: GraphQLInt }, name: { type: GraphQLString }, born: { type: GraphQLInt }, acted: { type: new GraphQLList(MovieType), resolve: (person) => { return []; } } }) });
答案 0 :(得分:4)
如果不将查询分成两个查询,这是不可能的,因此您将第一个结果作为变量提供给actor以供给第二个查询。
除了使用变量之外,您还可以让“行动”返回的电影对象包含对演员的引用,而不是当您要求“coactors”时,您手头有这些信息来执行您尝试的操作做。
然而,这种类型的API也是反模式 - 如果子对象依赖于父对象的上下文,则缓存和理解起来要困难得多。我想你应该问问自己为什么一个Movie对象除了演员之外还必须返回coactors。如果coactors只是同一个actor列表但删除了原始actor,那么这似乎很容易发生在客户端上,而上下文信息更容易获得。