Проблема:
Запрос очень медленный (по крайней мере ~ 1 минута), потому что он выполняется для каждого message
, полученного от messages
тип.
код:
Я хочу выполнить следующий запрос
messages(contactID:211375){
text
kids{
name
}
}
У меня есть следующие типы
messages: {
type: new GraphQLList(MessageType),
args: {contactID: {type: GraphQLID}},
resolve(parent, args){
let query = `SELECT *
FROM messages_mapping INNER JOIN messages ON messages_mapping.message_id=messages.id
WHERE messages_mapping.contact_id=`+args.contactID;
let result = db.get(query).then(function(response){
return response.map((message)=>{
return MessageTypeObj(message);
});
}).catch(function(err){
console.log(err);
});
return result;
}
И MessageType
разрешает kids
, например:
kids: {
type: new GraphQLList(StudentType),
resolve: (parent,args, context) => {
let query = `select *
from students
where id in
(select distinct student_id from messages_mapping where message_id=`+parent.id+` AND contact_id=`+context.contact_id+`)`;
let result = db.get(query).then(function(response){
return response.map((student)=>{
return StudentTypeObj(student);
});
}).catch(function(err){
console.log(err);
});
return result;
}
}
Возможное решение:
Я читал о пакетировании запросов в одном запросе и знаю оdataloader
& graphql-resolve-batch
, но я не уверен, как реализовать это в моем случае.