使用查询参数时,GraphQL中WHERE、AND、OR的最简用法
GraphQL 搜索查询核心规则与简洁示例
一、{} 的使用场景
- 查询结构必用:所有GraphQL查询/变更的主体都要用
{}包裹,用来定义你要获取的字段集合。比如基础搜索查询:query { searchPosts(keyword: "GraphQL") { title content } } - 嵌套字段必用:当返回的对象包含子对象时,用
{}指定子字段。比如搜索用户时获取其关联的文章:query { searchUsers(name: "Alice") { id name posts { title } } }
二、where 的适用场景
- 过滤条件标准化:多数GraphQL服务(尤其是基于ORM的如Prisma、Hasura)会用
where作为统一的过滤参数入口,把多个搜索条件整合在一起,让查询结构更清晰。比如多条件搜索:query { posts(where: { AND: [ { title_contains: "GraphQL" }, { createdAt_gte: "2024-01-01" } ] }) { title createdAt } } - 自定义搜索字段的替代:如果服务没有提供
where参数,可能会直接把搜索参数放在顶层(比如前面的searchPosts(keyword: "...")),这取决于API的设计规范,以实际服务定义为准。
三、可选命名查询的适用场景
- 多查询共存时:在同一个请求里发送多个查询时,必须给每个查询命名,避免冲突:
query SearchPosts { searchPosts(keyword: "GraphQL") { title } } query SearchUsers { searchUsers(name: "Alice") { name } } - 缓存与调试:命名查询能让后端日志、客户端缓存更容易识别和跟踪查询,便于调试和优化。
- 参数复用:如果查询需要传入复杂参数,命名后更易维护,也方便后续复用或修改。
四、简洁通用的搜索查询示例
基础单条件搜索
# 无命名的简单查询(适合单次请求) query { searchProducts(keyword: "laptop") { id name price } }
多条件过滤搜索(用where)
# 命名查询,便于调试和缓存 query FilterProducts { products(where: { price_lte: 5000, category: "electronics", name_contains: "pro" }) { id name price category } }
带嵌套字段的搜索
query SearchBlogs { searchBlogs(topic: "frontend") { title author { name avatar } tags } }
内容的提问来源于stack exchange,提问作者Octo Palm Tree
相关产品推荐
相关产品推荐

