使用graphql-codegen时,如何在GraphQL中实现name字段通配符搜索?
实现GraphQL中name字段的通配符搜索
首先得明确:通配符搜索的具体实现完全依赖你的GraphQL后端定义的USERQueryInput输入类型,先搞清楚这个输入类型的结构是关键。
第一步:确认USERQueryInput的Schema定义
你可以查看后端的GraphQL Schema(或者通过GraphQL Playground的文档面板查看),它的结构决定了你怎么传通配符参数。常见的两种定义方式:
- 方式1:
name字段直接支持带通配符的字符串
比如Schema可能是这样:
graphql-codegen生成的TS类型会对应:input USERQueryInput { name: String age: Int # 其他字段... }export type USERQueryInput = { name?: string | null; age?: number | null; // 其他字段类型... }; - 方式2:后端提供专门的过滤字段(比如
name_like、name_regex)
很多GraphQL后端会为模糊搜索单独定义字段,比如:
对应的TS类型会包含这些字段。input USERQueryInput { name_like: String name_regex: String age: Int # 其他字段... }
第二步:根据后端规则传参
情况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
相关产品推荐
相关产品推荐

