MongoDB Atlas GraphQL API предоставляет множество готовых функций. В предыдущих частях этой серии блогов мы реализовали все возможные операции CRUD (создание, чтение, обновление, удаление) с нашими данными. Но иногда этого недостаточно.

Возможно, вам потребуется выполнить расширенную аналитику ваших данных. Для этого вам нужно написать длинный конвейер агрегации, который обрабатывает несколько документов и возвращает вычисленные результаты. Это выходит за рамки возможностей API GraphQL по умолчанию, предоставляемого MongoDB Atlas. Но это не значит, что мы ограничены выполнением только базовых операций CRUD.

Пользовательские преобразователи для GraphQL — это именно то, что нам нужно для выполнения расширенных запросов и вычислений, которые мы только что обсуждали.

Этот блог является шестой частью следующей серии:



Зачем нам нужны пользовательские преобразователи для GraphQL?

Пользовательские преобразователи дают нам возможность расширять предоставляемый Atlas GraphQL API. Мы можем легко добавлять новые поля корневого уровня, которые требуют сложной бизнес-логики и вычислений, таких как выполнение конвейера агрегации, чтобы получить информацию из нашей базы данных для конкретного пользователя.

Все, что нам нужно сделать, это предоставить эти пять деталей для настройки нашего пользовательского преобразователя:

  • Имя.
  • Родительский тип.
  • Тип ввода.
  • Тип полезной нагрузки.
  • Функция Atlas, которая может извлекать данные из нашей базы данных, выполнять над ними сложные вычисления и возвращать вычисленные результаты распознавателю, которые позже будут отправлены пользователю.

Как мы можем создать панель аналитики с помощью React и Atlas GraphQL API?

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

Для нашего приложения мы создадим сводную панель инструментов, на которой пользователи смогут отслеживать, как (способ оплаты расходов) и где (категории расходов) они тратят свои деньги. Это поможет им лучше планировать и составлять бюджет на ближайшие месяцы, чтобы добиться успеха в достижении своих финансовых целей. Приборная панель должна выглядеть так:

Заголовок: Панель аналитики в React с использованием пользовательских распознавателей для Atlas GraphQL API

Создайте функции MongoDB Atlas для аналитики категорий и режимов.

Функция Атласа — это действительно хороший способ запускать код, не беспокоясь о базовой инфраструктуре. Функции Atlas автоматически масштабируются, обладают высокой доступностью и требуют минимальной настройки.

Функции имеют доступ к объекту контекст, который содержит:

  • Информация о пользователе, вызвавшем эту функцию.
  • Доступ к переменным окружения.
  • HTTP-клиент для связи с любым другим API в Интернете.
  • Доступ к таким службам, как источники данных.

Группировка суммы расходов по категориям

Прежде чем перейти к пользовательскому распознавателю Atlas GraphQL API, нам нужно создать функцию, которую может использовать пользовательский распознаватель. Перейдите к приложению App Services и выберите «Функции» в меню слева. Затем нажмите «Создать новую функцию», как показано на изображении ниже:

Давайте введем имя функции, которую мы создаем:

groupAmountByCategories

Затем нажмите «Сохранить черновик», как показано на изображении ниже:

Получайте информацию из базы данных с помощью MongoDB Aggregation Framework.

Далее перейдите на вкладку Редактор функций и выделите весь текст в редакторе.

Замените реализацию следующей функцией JavaScript:

После замены кода нажмите «Сохранить черновик», как показано ниже:

Группировка суммы расходов по способу оплаты

Теперь мы повторим тот же процесс для новой функции с именем:

groupAmountByModes

Внутри редактора функций для groupAmountByModes мы будем использовать следующую функцию JavaScript, чтобы получить все соответствующие расходы, сгруппировать их по имени режима и вычислить общую сумму для каждого режима с помощью конвейера агрегации.

Создайте собственный преобразователь для GraphQL

Пользовательский преобразователь для аналитики категорий

Следуйте последовательности в том же порядке, как указано на изображении ниже, чтобы создать новый пользовательский преобразователь GraphQL:

  1. Нажмите на вкладку GraphQL на левой панели.
  2. Щелкните вкладку Custom Resolvers на панели навигации на странице GraphQL.
  3. Нажмите кнопку «Добавить пользовательский преобразователь».

Теперь добавьте следующие данные в конфигурацию Custom GraphQL Resolver:

  • Имя поля GraphQL: categoryAnalytics
  • Тип родителя:Запрос
  • Функция:groupAmountByCategories (та, которую мы создали в предыдущем разделе)
  • Тип ввода: Пользовательский тип (выделите весь текст и затем вставьте следующее в текстовое поле)

Тип полезной нагрузки:Пользовательский тип (выделите весь текст, а затем вставьте следующий текст в текстовое поле)

После ввода всех данных нажмите «Сохранить черновик», как показано на изображении ниже:

Пользовательский преобразователь для аналитики режима

Следуя той же процедуре, что и выше, мы создадим новый пользовательский преобразователь со следующими данными:

  • Имя поля GraphQL: modeAnalytics
  • Тип родителя:Запрос
  • Функция:groupAmountByModes (вторая, которую мы создали в предыдущем разделе)

  • Тип ввода: существующий тип, а затем выберите Фильтр (тот, который мы только что создали для преобразователя categoryAnalytics) в следующем раскрывающемся списке.

  • Тип полезной нагрузки:Пользовательский тип (выделите весь текст, а затем вставьте следующий текст в текстовое поле)

После ввода всех данных нажмите «Сохранить черновик», как показано на изображении ниже:

Список настраиваемых распознавателей теперь содержит распознаватель categoryAnalytics и modeAnalytics, как показано на изображении ниже. И теперь все готово для развертывания наших изменений.

Заключение

Вау! Мы выполнили все настройки, необходимые для включения расширенной аналитики в нашем приложении Atlas App Services с использованием пользовательских распознавателей для GraphQL API. В следующей части этой серии блогов мы увидим, как мы можем использовать это в нашем внешнем интерфейсе React, чтобы предоставить нашим пользователям консолидированную панель инструментов.