Выберите случайные N записей из запроса GraphQL - PullRequest
0 голосов
/ 21 февраля 2019

Я создаю простое приложение для викторины, которое позволит пользователю выбирать различные категории и создавать тест из 5 вопросов, чтобы проверить свои знания.У меня есть длинный список вопросов настройки в AppSync, доступный через GraphQL.Однако, так как этот список продолжает расти, мне не имеет смысла перетягивать их клиенту и выбирать случайным образом.

Поддерживает ли GraphQL выбор случайного числа 5 из запроса?Так что, на стороне сервера, я могу выбрать всего 5 записей случайным образом?

 query listAll {
  listQuestions(filter: {
    topic: {
      contains: "chocolate"
    }
  }) {
    items {
      question
      answer
    }
  }
}

Я думал о других подходах, таких как случайное присвоение каждой записи номера и фильтрация по ней, но это не будет случайным каждый раз,

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Дэвид прав в написании этой логики внутри резольвера (как в GraphQL).

Если вы используете AWS AppSync, вы можете использовать лямбда-резолвер и присоединить его к запросу, чтобы вы могли написатьлогика для выбора случайных значений внутри лямбды, поэтому она является частью ответа GraphQL.Это один из способов сделать это.

0 голосов
/ 21 февраля 2019

Поддерживает ли GraphQL выбор случайных 5 из запроса?

Не напрямую, нет.Большинство более «интересных» вещей, которые вы можете себе представить при выполнении SQL-запроса, даже более простые вещи, такие как «вернуть только первые 10 записей» или «имеет фамилию« Джонс »», напрямую не поддерживаются в GraphQL.Вы должны создать такую ​​вещь из примитивов, которые она вам дает.

Так, что на сервере я могу выбрать всего 5 записей случайным образом?

Большинство GraphQLРеализации сервера поддерживают функции распознавателя , которые представляют собой произвольный код, вызываемый при запросе значения поля.Вы можете написать схему типа

type Query {
  listQuestions(filter: QuestionFilter, random: Int): [Question!]!
}

и получить доступ к аргументам в функции распознавателя.

Похоже, что AppSync имеет собственную систему распознавания .Для меня не очевидно, что при просмотре документации по документам поддерживается метод "pick n at random";Похоже, он в основном разработан как фасад для хранения базы данных, и большинство баз данных не оптимизированы для этого вида запросов.

...