Трябва да погледнете GraphQL-to-MongoDB, или как се научих да спра да се тревожа и да обичам API за генерирани заявки . Говори се за междинен пакет, който използва типовете на GraphQL, за да генерира вашия GraphQL API и анализира заявки, изпратени от клиенти, в MongoDB заявки. Повече или по-малко прескача Mongoose.
Отказ от отговорност:това е моята публикация в блога.
пакет генерира входни типове GraphQL за аргументите на полето на вашата схема и обгръща функцията за разрешаване, за да ги анализира в MongoDB заявки.
Като се има предвид прост GraphQLType:
const PersonType = new GraphQLObjectType({
name: 'PersonType',
fields: () => ({
age: { type: GraphQLInt },
name: {
type: new GraphQLNonNull(new GraphQLObjectType({
name: 'NameType',
fields: () => ({
firstName: { type: GraphQLString },
lastName: { type: GraphQLString }
})
}))
}
})
});
За най-честия случай на употреба ще изградите поле в схемата на GraphQL с getMongoDbQueryResolver
и getGraphQLQueryArgs
. filter
, projection
и options
осигурени от обвивката, могат да бъдат предадени директно на функцията за намиране.
person: {
type: new GraphQLList(PersonType),
args: getGraphQLQueryArgs(PersonType),
resolve: getMongoDbQueryResolver(PersonType,
async (filter, projection, options, source, args, context) =>
await context.db.collection('person').find(filter, projection, options).toArray()
)
}
Пример за заявка, която можете да изпратите до такова поле:
{
person (
filter: {
age: { GT: 18 },
name: {
firstName: { EQ: "John" }
}
},
sort: { age: DESC },
pagination: { limit: 50 }
) {
name {
lastName
}
age
}
}
Има също обвивка и генератор на типове аргументи за полета за мутация.