首页 > 解决方案 > 如何使用 mongoose 在 GraphQL 中过滤查询?

问题描述

我是 GraphQL 的新手,目前正尝试在我的 nodejs 项目中使用 mongodb 作为我的数据库(使用 mongoose)来实现它。我已经设置了架构以及处理与数据库通信的解析器,并且一切正常。使用 graphiql 工具,我可以进行查询和突变,并且一切都完美地保存到数据库中。我现在正在尝试对 GraphQL API 实现过滤和排序,但我很困惑。我知道我可以将参数传递给我的查询,然后在我的解析器中访问这些参数并编写逻辑以将它们放入我的 mongodb 查询中。但是我发现自己必须在我的 GraphQL 模式中为每个可以应用的过滤器定义一个输入。例如,我的架构的一部分允许我按价格过滤产品:

type Product {
    _id: ID!
    name: String!
    price: Float!
}

input ProductFilterInput {
    price: IntFilter
}

input IntFilter {
    eq: Float
    gt: Float
    gte: Float
    lt: Float
    lte: Float
    between: [Float]
}

type RootQuery {
    products(filters: ProductFilterInput): [Product]
}

然后在我的解析器中,我必须以不同的方式处理每个可能的过滤器参数。如果查询参数是“{price: {gt: 10}}”,我必须说类似

“Product.find({price: {$gt: 10}})”。

在解析器中为每个可能的过滤器编写一堆不同的检查和逻辑对我来说似乎很疯狂。当我研究这个时,我可以找到使用参数来过滤 GraphQL 查询本身的资源,但我很难找到有关如何编写模式和解析器的文档。也许我忽略了一些东西,但是有没有一种方法可以编写模式和解析器,这样我就不必显式定义每个过滤器,然后再次显式翻译解析器中的每个过滤器?也许是一种编写解析器的方法,这样我就可以简单地将参数插入猫鼬“查找”方法中,它理解我在问什么?

希望这一切都有意义,如果您希望我尝试进一步解释,我会尽力而为。

感谢任何可以提供帮助的人!

标签: mongodbmongoosegraphql

解决方案


推荐阅读