Как фильтровать запросы в GraphQL с помощью мангуста?

Я новичок в GraphQL и в настоящее время пытаюсь реализовать его в своем проекте nodejs с mongodb в качестве моей базы данных (с использованием mongoose). У меня настроена схема, а также преобразователи, которые обрабатывают связь с базой данных, и все работает нормально. Используя инструмент graphiql, я могу делать запросы и изменять, и все отлично сохраняется в базе данных. Сейчас я пытаюсь реализовать фильтрацию и сортировку в GraphQL API, но я запутался. Я понимаю, что могу передавать аргументы своим запросам, а затем обращаться к ним в моих преобразователях и писать логику, чтобы поместить их в мои запросы mongodb. Но мне приходится определять входные данные в моей схеме GraphQL для каждого возможного фильтра, который можно применить. Например, часть моей схемы позволяет мне фильтровать продукты по их цене:

type Product {
    _id: ID!
    name: String!
    price: Float!
}

input ProductFilterInput {
    price: IntFilter
}

input IntFilter {
    eq: Float
    gt: Float
    gte: Float
    lt: Float
    lte: Float
    between: [Float]
}

type RootQuery {
    products(filters: ProductFilterInput): [Product]
}

Затем в моем преобразователе я должен обрабатывать каждый возможный аргумент фильтра по-разному. Если аргумент запроса был "{price: {gt: 10}}", я должен сказать что-то вроде

"Product.find ({price: {$ gt: 10}})".

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

Надеюсь, все это имело смысл, если вы хотите, чтобы я попытался объяснить дальше, я сделаю все, что в моих силах.

Спасибо всем, кто может помочь!

следуйте некоторым лучшим, более универсальным шаблонам / примерам построения условий [API] ... например, where: {field: "price", condition: "gt", value: 10} и / или «операторы», древовидные, с возможностью синтаксического анализа, конвертируемые в соответствии с вашими требованиями к базе данных / службам

xadm 30.03.2021 12:21

Большое спасибо! В этом больше смысла, чем то, что я пытался сделать. И это значительно упрощает написание схемы и преобразователей!

Max 30.03.2021 13:39
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
2
31
0

Другие вопросы по теме