Du bør se på GraphQL-to-MongoDB, eller hvordan jeg lærte at stoppe med at bekymre mig og elske genererede forespørgsels-API'er . Den taler om en middleware-pakke, der udnytter GraphQL's typer til at generere din GraphQL API og analyserer anmodninger sendt fra klienter til MongoDB-forespørgsler. Den springer mere eller mindre over Mongoose.
Ansvarsfraskrivelse:dette er mit blogindlæg.
pakken genererer GraphQL-inputtyper til dine skemafeltargumenter og omslutter løsningsfunktionen for at parse dem til MongoDB-forespørgsler.
Givet en simpel 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 }
})
}))
}
})
});
Til den mest almindelige brug skal du bygge et felt i GraphQL-skemaet med en getMongoDbQueryResolver
og getGraphQLQueryArgs
. filter
, projection
og options
leveret af indpakningen kan videregives direkte til søgefunktionen.
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()
)
}
Et eksempel på en forespørgsel, du kan sende til et sådant felt:
{
person (
filter: {
age: { GT: 18 },
name: {
firstName: { EQ: "John" }
}
},
sort: { age: DESC },
pagination: { limit: 50 }
) {
name {
lastName
}
age
}
}
Der er også en indpaknings- og argumenttypegenerator til mutationsfelter.