如何在GraphQL中筛选嵌套对象数组(排除type为null的项)
GraphQL筛选contactInfo中type不为null的条目
原始接口返回数据
"contactInfo": [ { "type": "phone", "data": "123456789" }, { "type": null, "data": "" }, { "type": "phone", "data": "1235553456" } ]
已实现的筛选逻辑
之前使用以下查询可以正确筛选出type为null的条目:
contactInfo(type: null ) { type data }
需求:筛选type不为null的条目
要得到仅包含type非null的contactInfo数组,可根据后端GraphQL API的支持情况选择以下方案:
方案1:使用后端支持的非空过滤参数
如果你的GraphQL后端实现了不等于的过滤规则(不同服务语法可能有差异),最直接的方式是使用对应的参数:
- 若后端支持
_not后缀(比如Hasura):
contactInfo(type_not: null) { type data }
- 若后端采用标准比较运算符(比如Prisma):
contactInfo(type: { ne: null }) { type data }
方案2:枚举已知非空类型(仅适用于类型固定场景)
如果type的可选非空值是固定的(比如只有"phone"),可以直接指定类型值筛选:
contactInfo(type: "phone") { type data }
如果有多种非空类型,可使用_in参数传入类型列表:
contactInfo(type_in: ["phone", "email"]) { type data }
方案3:前端本地过滤(后端不支持非空筛选时)
如果后端未提供相关过滤能力,只能在获取全部数据后,在前端进行本地筛选:
// 假设接口返回数据存储在response变量中 const filteredContacts = response.contactInfo.filter(item => item.type !== null);
内容的提问来源于stack exchange,提问作者John Glabb
相关产品推荐
相关产品推荐

