Bạn nên xem GraphQL-to-MongoDB hoặc cách tôi học cách ngừng lo lắng và yêu thích các API truy vấn được tạo . Nó nói về một gói phần mềm trung gian tận dụng các loại của GraphQL để tạo API GraphQL của bạn và phân tích cú pháp các yêu cầu được gửi từ khách hàng thành các truy vấn MongoDB. Nó ít nhiều bỏ qua Mongoose.
Tuyên bố từ chối trách nhiệm:đây là bài đăng trên blog của tôi.
gói tạo các loại đầu vào GraphQL cho các args trường lược đồ của bạn và bao bọc xung quanh hàm giải quyết để phân tích cú pháp chúng thành các truy vấn MongoDB.
Đưa ra một GraphQLType đơn giản:
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 }
})
}))
}
})
});
Đối với trường hợp sử dụng phổ biến nhất, bạn sẽ tạo một trường trong lược đồ GraphQL với getMongoDbQueryResolver
và getGraphQLQueryArgs
. Bộ lọc filter
, projection
và các tùy chọn filter
được cung cấp bởi trình bao bọc có thể được chuyển trực tiếp đến hàm tìm.
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()
)
}
Ví dụ về truy vấn bạn có thể gửi đến trường như vậy:
{
person (
filter: {
age: { GT: 18 },
name: {
firstName: { EQ: "John" }
}
},
sort: { age: DESC },
pagination: { limit: 50 }
) {
name {
lastName
}
age
}
}
Ngoài ra còn có một trình bao bọc và trình tạo loại đối số cho các trường đột biến.