Gatsby GraphiQL使用elemMatch过滤数组返回全部元素如何解决
问题原因
你现在的写法把elemMatch筛选条件加在了mKT节点的查询参数上,这个筛选逻辑是:只要mKT的data数组中存在至少一个name等于Apple的元素,就返回整个mKT节点,不会对data子数组本身做过滤,所以拿到的还是完整的数组内容。
修复方案
把筛选条件加到data字段的参数上,直接过滤数组内的元素:
query MyQuery { mKT { data(filter: {name: {eq: "Apple"}}) { name description } } }
这个查询返回的data会是只包含匹配元素的数组,如果你需要单个对象,在代码中取数组的第一个元素即可:
const targetItem = data.mKT.data[0]
如果你的插件配置不支持data字段的filter参数,检查对应数据源/转换器插件的配置,确保数组字段的过滤能力已开启,Gatsby官方的gatsby-transformer-json等插件默认支持该能力。
内容的提问来源于stack exchange,提问作者Saber
相关产品推荐
相关产品推荐

