如何在 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('.')
            
          
        ,
        ...
    ]

这将允许您进行单独的查询,例如allCategoryallContentallContentGropupallMenu

此时,您可以轻松地过滤 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 上应用过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Heroku 上渲染 Vue、Graphql 应用程序

中继应用程序:如何自省服务器上的模式?

GraphQL:从 JSON 文件源完成查询

Type-GraphQL 上 JSON 字段的类型

如何在 TypeScript 中获取 GraphQL 架构

如何将数据的 JSON 格式转换为 GraphQL 查询格式