如何在 JSON 文件上运行的 GraphQL 上应用过滤器?
Posted
技术标签:
【中文标题】如何在 JSON 文件上运行的 GraphQL 上应用过滤器?【英文标题】:How to apply filter on GraphQL running on JSON file? 【发布时间】:2019-10-24 13:22:19 【问题描述】:我正在尝试对 JSON 文件运行 GraphQL 查询。它运行良好,但是当我尝试在其中添加过滤器时,它仍然显示所有记录。
My JSON data file
My JSON Schema
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 查询结果:
【问题讨论】:
这个问题你还需要帮助吗? 【参考方案1】:您的查询仅返回单个节点,过滤器仅用于过滤节点(而不是节点内的数据)。
您似乎试图仅查询具有activityMeta.contentType === "iframe-game"
的content
。
你能把你的 json 分割成单独的文件吗?如果是,那么您实际上可以使用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"
使用以下查询
query MyQuery
allContent(filter: activityMeta: contentType: eq: "iframe-game")
nodes
name
activityMeta
contentType
contentLink
inScene
backgroundImages
path
type
link
description
content
score
gameOverTitle
gameOverProgress
【讨论】:
以上是关于如何在 JSON 文件上运行的 GraphQL 上应用过滤器?的主要内容,如果未能解决你的问题,请参考以下文章