You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用查询参数时,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:01:18