Você deve ver GraphQL-to-MongoDB, ou como aprendi a parar de me preocupar e amar APIs de consulta geradas . Ele fala sobre um pacote de middleware que aproveita os tipos do GraphQL para gerar sua API do GraphQL e analisa solicitações enviadas de clientes para consultas do MongoDB. Ele mais ou menos salta sobre Mongoose.
Isenção de responsabilidade:esta é a minha postagem no blog.
O pacote gera tipos de entrada GraphQL para seus argumentos de campo de esquema e envolve a função resolve para analisá-los em consultas MongoDB.
Dado um GraphQLType simples:
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 }
})
}))
}
})
});
Para o caso de uso mais comum, você criará um campo no esquema GraphQL com um
getMongoDbQueryResolver
e getGraphQLQueryArgs
. O filter
, projection
, e options
fornecido pelo wrapper pode ser passado diretamente para a função find. 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()
)
}
Um exemplo de uma consulta que você pode enviar para esse campo:
{
person (
filter: {
age: { GT: 18 },
name: {
firstName: { EQ: "John" }
}
},
sort: { age: DESC },
pagination: { limit: 50 }
) {
name {
lastName
}
age
}
}
Há também um gerador de tipos de argumento e wrapper para campos de mutação.