如何在GraphQL中过滤并限制嵌套对象数组?
解决GraphQL嵌套对象数组的多层过滤问题
嘿,我懂你的困扰!你当前的查询只是对每个properties条目里的codes数组做了内部过滤,但并没有把那些过滤后codes为空的properties对象从结果数组里移除——这就是为什么还会出现空codes的条目。
要得到你想要的目标结果,可以分两种情况处理:
1. 后端Schema支持的话,在properties层级添加过滤条件
如果你的GraphQL服务的Schema允许在properties字段上传递过滤参数(很多后端框架比如Prisma、Hasura都支持这类关联过滤),你可以直接让后端只返回包含符合条件codes的properties项。示例查询如下:
properties(where: { codes: { id: "1" } }) { codes(id: "1") { id } }
这里的where参数格式可能需要根据你的后端实现调整,但核心逻辑是告诉GraphQL服务:只返回那些至少有一个code.id等于"1"的properties对象,同时再对每个匹配的properties里的codes做一次过滤(确保只返回id=1的code)。
2. 后端不支持时,前端手动过滤结果
如果暂时没法修改后端Schema或Resolver,你可以在拿到返回数据后,在前端代码里过滤掉codes为空的properties条目。比如用JavaScript处理:
// 假设originalData是你拿到的原始返回结果 const targetData = { data: { properties: originalData.data.properties.filter(prop => prop.codes.length > 0) } };
这段代码会把properties数组里所有codes为空的对象剔除,正好得到你想要的输出结果。
总的来说,优先考虑后端层面的过滤(性能更好,减少数据传输),如果暂时做不到,前端处理也能快速解决问题。
内容的提问来源于stack exchange,提问作者John Glabb
相关产品推荐
相关产品推荐

