2017-02-12 7 views
0

ниже является 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

ли вы имеете в виду, что вы хотите вернуть много объектов, таких как 'user', используя один запрос? И каждый «пользователь» имел бы один из «id», указанный выше? – piotrbienias

+0

да, я хотел бы получить всех пользователей в '[]' и выполнить один запрос и сделать так же, как и запрос db –

ответ

0

В таком случае вы можете создать query метод, который будет принимать array в качестве параметра, который будет массивом идентификаторов в Это дело.

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 будет отличаться в зависимости от того, что базы данных вы используете. В этом примере я использовал модуль node-postgres для PostgreSQL. Однако концепция одинакова - используйте массив идентификаторов для выполнения единого запроса, возвращающего всех пользователей.

И тогда вы могли бы назвать этот запрос:

query getUsers($ids: [ID!]!) { 
    getUsers(ids: $ids){ 
     id 
     email 
     ... 
    } 
} 

// and the variables below 
{ 
    ids: ['id#1', 'id#2', 'id#3'] 
}