Как отобразить вложенные типы данных объекта graphql с учетом идентификатора объекта MongoDB?

#mongodb #graphql

#mongodb #graphql

Вопрос:

Я пишу приложение с GraphQL и mongoose. Я создал функцию для получения всех заказов внутри MongoDB. Объект booking содержит ссылку на другой объект, называемый Service . Когда я сохраняю бронирование, он сохраняет связанный объект сервиса в качестве идентификатора объекта в MongoDB. Когда я делаю запрос в graphql, чтобы получить все заказы, graphql не предоставляет сервисы и их типы полей, поскольку graphql получает только ObjectId. Как я могу исправить graphql?

Возвращено сообщение об ошибке для graphql

Все заказы находятся внутри базы данных, но пользователь представлен как идентификатор объекта

Определения типов данных GraphQL

Решатель, о котором идет речь, делает запрос

Объявление функции graphql называется createAppointmentBookings

Ответ №1:

Вам нужно написать распознаватель для ServiceType в AppointmentBooking.

 Query: {
  async getAppointmentBookings() {
    ...
  }
},
Mutation: {
  ...
},
AppointmentBooking: {
  serviceType: async(parent, args, ctx, info) => {
    // Here you will get the objectId from the parent that need to query services
    // This will call for every object inside the bookings
    // Assuming you are storing the objectID for the services in the key servicetype
    const serviceId = parent.serviceType;
    try {
      const serviceDetails = await Sevice.findByID(serviceID) ;
      return serviceDetails;
    } catch (err) {
      throw new Error(err);
    }
  }
}
 

Комментарии:

1. Спасибо за ответ! Мне интересно, является ли это общим шаблоном проектирования для работы с GraphQL и базами данных, такими как MongoDB?

2. Для любых будущих ссылок const serviceDetails = await Service.findById(serviceId) — это то, что сработало, поскольку этот метод вызывается для каждой записи на прием, которая содержит свой собственный serviceId.

3. medium.com/paypal-engineering /. … Это сообщение в блоге даст лучшее понимание шаблонов,

4. Отлично! Спасибо за помощь!