如何在运行于JSON文件的GraphQL上应用过滤器?

时间:2019-06-10 06:17:30

标签: json graphql gatsby

我正在尝试对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
            }
          }
        }
      }
    }
  }
}

文件夹结构:

enter image description here

JSON数据配置:

enter image description here

GraphQL查询结果:

enter image description here

1 个答案:

答案 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('.') } } }, ... ] allCategoryallContentallContentGropup

到此为止,您可以轻松过滤allMenu查询以仅将allContent与以下查询匹配的节点

node.activityMeta.contentType === "iframe-game"