下面是GraphQLObject字段
userId: {
type: GraphQLID,
resolve: obj => {
console.log(obj._id);
return obj._id;
}
},
email: { type: GraphQLString },
password: { type: GraphQLString },
firstName: { type: GraphQLString },
lastName: { type: GraphQLString },
我的服务器在我的文档中同样发出多个请求,这里它会发送5个不同的请求。
如何优化这些请求在一个请求中获取所有数据
589800cf39b58b29c4de90dd
--------------------------------
58980673e7c9a733009091d1
--------------------------------
58985339651c4a266848be42
--------------------------------
589aac5f884b062b979389bc
--------------------------------
589aad9d24989c2d50f2a25a
答案 0 :(得分:0)
在这种情况下,您可以创建一个query
方法,该方法接受array
作为参数,在这种情况下,这将是一个ID数组。
getUsers: {
type: new GraphQLList(User),
args: {
ids: {
type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(GraphQLID)))
}
},
resolve: (root, args, context) => {
let query = 'SELECT * FROM users WHERE id = ANY($1)';
return pgClient.query(query, [args.ids], (err, result) => {
// here you would access all returned rows in the result object
console.log(result);
});
}
}
query
变量会因您使用的数据库而异。在这个例子中,我使用了PostgreSQL的node-postgres
模块。但是,概念是相同的 - 使用id数组来执行返回所有用户的单个查询。
然后你可以调用该查询:
query getUsers($ids: [ID!]!) {
getUsers(ids: $ids){
id
email
...
}
}
// and the variables below
{
ids: ['id#1', 'id#2', 'id#3']
}
答案 1 :(得分:0)
这是Dataloader的工作,这是一个来自Facebook的图书馆,专门用于将这样的查询批处理: