Size: a a a

GraphQL — русскоговорящее сообщество

2020 September 21

ПЧ

Павел Червов... in GraphQL — русскоговорящее сообщество
Dmitry Balitsky
Из базы достаёте документ полностью, функция вернёт только то что запросит фронт
Полностью - это оверхед, я хочу иметь в getUsers() список запрошенных полей, понимаете?
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
А если вы чего-то недопередадите, то ругнёт вас сервак и скажет, что люди мол ждут поле ХХХ, а там ссылка на YYY
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
Павел, вы педант, пишите тип новый например SuperUser
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
в нём список чего конкретно уж больно нужно
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
Далее запрос в базу только этого с режектом
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
И отдавайте что хотите
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
Но в реальной жизни это всёравно что пинать пингвина
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
Так вот, из интересного видите там в типах ссылка на профайл
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
Так в этом случае нужно написать специальную функцию которая склеит два документа
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
Вы достаете объект user, в поле profile там ObjectId например на таблицу профайл
источник

ПЧ

Павел Червов... in GraphQL — русскоговорящее сообщество
Dmitry Balitsky
Павел, вы педант, пишите тип новый например SuperUser
Спасибо. Может я и педант. Я просто прочитал статью (выше Алексей скидывал), в которой разбирали эту проблему на примере получения одного объекта и там как раз советуют фетчить каждое поле отдельно. Но что делать если запросили список, там не говорят 😄
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
и резолвер будет уже иметь сигнатуру функции такую User: {
   profile: async ({ profile }, args, { mongo: { ObjectId, Profiles } }) => {
     // Если нет профайла
     if (!profile) {
       return null
     }

     return Profiles.findOne({ _id: ObjectId(profile) })
   }
 }
источник

ПЧ

Павел Червов... in GraphQL — русскоговорящее сообщество
Dmitry Balitsky
и резолвер будет уже иметь сигнатуру функции такую User: {
   profile: async ({ profile }, args, { mongo: { ObjectId, Profiles } }) => {
     // Если нет профайла
     if (!profile) {
       return null
     }

     return Profiles.findOne({ _id: ObjectId(profile) })
   }
 }
Спасибо, возьму "на карандаш" 👍
источник

А

Арсений in GraphQL — русскоговорящее сообщество
Павел Червов
Полностью - это оверхед, я хочу иметь в getUsers() список запрошенных полей, понимаете?
Не знаю как это делается на ноде, но на питоне мы сами писали прослойку чтобы генерировать оптимальные запросы к бд
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
Ещё много интересных моментов
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Павел Червов
Спасибо. Может я и педант. Я просто прочитал статью (выше Алексей скидывал), в которой разбирали эту проблему на примере получения одного объекта и там как раз советуют фетчить каждое поле отдельно. Но что делать если запросили список, там не говорят 😄
источник

ПЧ

Павел Червов... in GraphQL — русскоговорящее сообщество
Спасибо, это я тоже читал, там тоже нет конкретного решения, просто разбор 4го аргумента
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
Это наверное делают люди, которые пишут идеальные проекты для идеального мира.
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Павел Червов
Спасибо, это я тоже читал, там тоже нет конкретного решения, просто разбор 4го аргумента
источник

ПЧ

Павел Червов... in GraphQL — русскоговорящее сообщество
Павел Червов
// ептиль, а как-нибудь по-короче нельзя?
info.fieldNodes[0].selectionSet.selections.map(selection => selection.name.value);
источник