如何正确使用GraphQL查询变量搜索匹配多个兴趣标签的用户
问题原因
- 查询变量的JSON结构存在同键名覆盖问题:JSON对象中不允许出现重复键,你定义
tagList时重复写了两次_eq,后面的"_eq": "apple"会直接覆盖前面的"_eq": "dog",导致dog的匹配条件直接丢失 - 查询中的
_or逻辑写法错误:你将整个$tagList放在单个tag过滤条件中,无法实现多标签的或匹配逻辑
解决方案
推荐使用_in操作符实现多标签匹配,写法更简洁,兼容性也更好,只需修改两处代码即可:
修改后的GraphQL查询
users(offset: $offset, limit: 30, order_by: {lastRequest: asc}, where: {dob: {_gte: $fromDate, _lte: $toDate}, interestTagsFromSenderId: {tag: {_in: $tagList}}}) { id displayName profilePhotoUrl dob bio location interestTags: interestTagsFromSenderId { tag } created_at }
修改后的查询变量
{ "offset": 0, "fromDate": "1999-07-01", "toDate": "2024-01-01", "tagList": ["dog", "apple"] }
说明
_in操作符会自动匹配字段值是否属于给定的数组范围,天然支持多值的或逻辑,不需要额外嵌套_or条件。如果你的GraphQL服务端不支持_in操作符,也可以手动展开_or条件:
interestTagsFromSenderId: {_or: [{tag: {_eq: $tag1}}, {tag: {_eq: $tag2}}]}
对应查询变量增加tag1、tag2两个字符串变量即可,不过这种方式不适合标签数量不固定的场景。
内容的提问来源于stack exchange,提问作者Matthew Slaton
相关产品推荐
相关产品推荐

