Ограничение полей, получаемых от MongoDB, в соответствии с GraphQL запросом

Используемые модули:

[email protected]
[email protected]
[email protected]

Модель коллекции Category предусматривает несколько полей:
name, decription, itemsInCategory

Клиент через GraphQL запрашивает данные:

query {
    item {
        category {
            description
        }
    }
}

Нет никакого смысла делать выборку всех полей из базы данных на такой запрос, поэтому ограничиваю выборку следующим образом:

/graphQL/resolvers/category.js

module.exports = {
    category: async (parent, args, { models, fieldsFilter }, gqlModel ) => {
        return await models.Categories.findById( parent.category, fieldsFilter(gqlModel) );
    },
};

index.js

const fieldsFilter = function( gqlModel ) {
    let res = [];
    gqlModel.fieldNodes.forEach( fNode => {
        res = res.concat( fNode.selectionSet.selections.map( el=>el.name.value ) );
    } );
    return res;
};
const server = new ApolloServer( {
    typeDefs,
    resolvers,
    context: ()=> {
        return { models, fieldsFilter }
    }
} );

Всё работает как и хочется - от базы данных запрашиваются только те поля, которые нужно будет вернуть клиенту, ничего лишнего. Вот только не покидает чувство, что это велосипед (функция fieldsFilter).

Есть ли готовые решения?


Ответы (0 шт):