Anda harus melihat GraphQL-to-MongoDB, atau bagaimana saya belajar berhenti mengkhawatirkan dan menyukai API kueri yang dihasilkan . Ini berbicara tentang paket middleware yang memanfaatkan jenis GraphQL untuk menghasilkan API GraphQL Anda dan mem-parsing permintaan yang dikirim dari klien ke kueri MongoDB. Ini kurang lebih melompati Luwak.
Penafian:ini adalah posting blog saya.
paket menghasilkan jenis input GraphQL untuk argumen bidang skema Anda, dan membungkus fungsi resolve untuk menguraikannya ke dalam kueri MongoDB.
Diberikan GraphQLType sederhana:
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 }
})
}))
}
})
});
Untuk kasus penggunaan yang paling umum, Anda akan membuat bidang dalam skema GraphQL dengan getMongoDbQueryResolver
dan getGraphQLQueryArgs
. filter
, projection
, dan options
disediakan oleh pembungkus dapat diteruskan langsung ke fungsi 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()
)
}
Contoh kueri yang dapat Anda kirim ke bidang seperti itu:
{
person (
filter: {
age: { GT: 18 },
name: {
firstName: { EQ: "John" }
}
},
sort: { age: DESC },
pagination: { limit: 50 }
) {
name {
lastName
}
age
}
}
Ada juga generator tipe pembungkus dan argumen untuk bidang mutasi.