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

使用graphql-codegen时,如何在GraphQL中实现name字段通配符搜索?

实现GraphQL中name字段的通配符搜索

首先得明确:通配符搜索的具体实现完全依赖你的GraphQL后端定义的USERQueryInput输入类型,先搞清楚这个输入类型的结构是关键。

第一步:确认USERQueryInput的Schema定义

你可以查看后端的GraphQL Schema(或者通过GraphQL Playground的文档面板查看),它的结构决定了你怎么传通配符参数。常见的两种定义方式:

  • 方式1:name字段直接支持带通配符的字符串
    比如Schema可能是这样:
    input USERQueryInput {
      name: String
      age: Int
      # 其他字段...
    }
    
    graphql-codegen生成的TS类型会对应:
    export type USERQueryInput = {
      name?: string | null;
      age?: number | null;
      // 其他字段类型...
    };
    
  • 方式2:后端提供专门的过滤字段(比如name_like、name_regex)
    很多GraphQL后端会为模糊搜索单独定义字段,比如:
    input USERQueryInput {
      name_like: String
      name_regex: String
      age: Int
      # 其他字段...
    }
    
    对应的TS类型会包含这些字段。

第二步:根据后端规则传参

情况1:直接在name字段用通配符

如果后端支持在name里直接写通配符(比如用%匹配任意字符,类似SQL的LIKE;或者用*),你只需要在变量里传入带通配符的字符串:
比如搜索名字包含"John"的用户,查询变量可以这么写:

const queryVariables = {
  query: {
    name: "%John%" // 或者按后端要求用*John*
  }
};

对应的GraphQL查询还是你原来的写法,不需要改动。

情况2:用专门的过滤字段

如果后端有name_like或name_regex这类字段,直接传对应格式的值就行:

  • 用name_like(模糊匹配):
    const queryVariables = {
      query: {
        name_like: "%John%"
      }
    };
    
  • 用name_regex(正则匹配):
    const queryVariables = {
      query: {
        name_regex: "John.*" // 匹配以John开头的名字
      }
    };
    

注意事项

  • 不同后端的通配符规则不一样:比如MongoDB后端可能支持正则,SQL后端用%,有些自定义后端用*,必须按后端的规则来
  • 如果是你自己开发后端,需要在USERQueryInput里添加对应的过滤字段,然后在resolver里实现匹配逻辑:比如MongoDB可以用{ name: { $regex: 传入的通配符字符串, $options: "i" } }来做不区分大小写的模糊搜索

内容的提问来源于stack exchange,提问作者Anupam Choudhary

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:25:40