我正在尝试对JSON文件运行GraphQL查询。它运行良好,但是当我尝试在其中添加过滤器时,它仍然显示所有记录。
GraphQL:
{
allDataJson(filter: {content: {elemMatch: {activityMeta: {contentType: {eq: "iframe-game"}}}}}) {
edges {
node {
content {
name
type
link
description
content {
score
gameOverTitle
gameOverProgress
}
activityMeta {
contentLink
contentType
inScene
backgroundImages {
path
}
}
}
}
}
}
}
文件夹结构:
JSON数据配置:
GraphQL查询结果:
答案 0 :(得分:1)
您的查询仅返回单个节点,并且过滤器仅用于过滤节点(而不过滤节点内的数据)。
您似乎只想查询具有content
的{{1}}。
您是否可以将json拆分为单独的文件?如果是,那么您实际上可以使用activityMeta.contentType === "iframe-game"
创建不同的节点类型。
假设文件夹结构为:
gatsby-transformer-json
您可以像这样为每个文件创建不同的节点类型:
src/
data/
category.json
content.json
contentGroup.json
menu.json
,这将使您可以进行单独的查询,例如 plugins: [
{
resolve: `gatsby-transformer-json`,
options: {
typeName: ({ node }) => {
return node.relativePath.split('.').slice(0, -1).join('.')
}
}
},
...
]
,allCategory
,allContent
,allContentGropup
。
到此为止,您可以轻松过滤allMenu
查询以仅将allContent
与以下查询匹配的节点
node.activityMeta.contentType === "iframe-game"