【问题标题】:How to filter by a file extension in a graphql query如何在 graphql 查询中按文件扩展名过滤
【发布时间】:2019-09-10 10:37:24
【问题描述】:

我想查询存储库中 docs 文件夹中的 markdown 文件的内容。我正在使用gatsby-source-graphqlGitHub v4 API

到目前为止,我已经设法使用此代码获取文件内容:

{
  github {
    search(first: 1, type: REPOSITORY, query: "repo:kalessil/phpinspectionsea") {
      edges {
        node {
          ... on GitHub_Repository {
            folder: object(expression: "master:docs/") {
              ... on GitHub_Tree {
                entries {
                  oid
                  object {
                    ... on GitHub_Blob {
                      text
                    }
                  }
                  name
                }
              }
            }
          }
        }
      }
    }
  }
}

问题是任何类型的文件都可能最终在目录中,例如txt,并且需要额外的工作才能过滤掉。

有没有办法在docs/ 目录中只查询带有md 扩展名的文件?

编辑:

可以分三步完成。首先通过查询所有文件,过滤然后查询单个文件:

{
  github {
    files: search(first: 1, type: REPOSITORY, query: "repo:kalessil/phpinspectionsea") {
      edges {
        node {
          ... on GitHub_Repository {
            object(expression: "master:docs/") {
              ... on GitHub_Tree {
                entries {
                  name
                }
              }
            }
          }
        }
      }
    }
    content: search(first: 1, type: REPOSITORY, query: "repo:kalessil/phpinspectionsea") {
      edges {
        node {
          ... on GitHub_Repository {
            object(expression: "master:docs/DEVELOPERS.md") {
              ... on GitHub_Blob {
                text
              }
            }
          }
        }
      }
    }
  }
}

也许有更好的方法?

EDIT2:

我已经按照@robinmentral重构了代码(谢谢)

{
  github {
    files: repository(owner: "kalessil", name: "phpinspectionsea") {
      ... on GitHub_Repository {
        object(expression: "master:docs/") {
          ... on GitHub_Tree {
            entries {
              name
            }
          }
        }
      }
    }
    content: repository(owner: "kalessil", name: "phpinspectionsea") {
      ... on GitHub_Repository {
        object(expression: "master:docs/DEVELOPERS.md") {
          ... on GitHub_Blob {
            text
          }
        }
      }
    }
  }
}

但它仍然需要在 JavaScript 端进行过滤。由于我需要先获取所有名称,因此按扩展名过滤并仅直接查询这些文件。

这其实是gatsby-source-graphql中的正确做法;对于将来遇到此问题的任何人,请查看他们的示例项目。

现在我只是好奇是否有可能将所有这些操作合二为一。

【问题讨论】:

  • 看来你解决了!您可以使用 repository(owner: "kalessil", name: "phpinspectionsea") { ... on Repository { ... } } 而不是使用 search 来改进您的存储库查询。
  • 感谢您的洞察力。实际上,我仍然不知道该怎么做。仍然需要 GraphQL > JS > GraphQL 才能获得结果,这确实完成了任务。现在我只是好奇这是否可能。
  • 不知道这是否可能,我遇到了类似的问题,我无法使用 GitHub GraphQL API 解决。而且从 StackOverflow 获得的帮助也很少,太新了。如果这里没有进一步的帮助,您可以尝试在GitHub community forums 上提问。我很想看看你的想法!
  • 附带说明,可以删除... on GitHub_Repository {} 并在repository 查询之后直接使用object

标签: git github graphql gatsby


【解决方案1】:

跟进我的comment:如果您想查询特定文件的内容(如您的示例中),您可以使用这个更简洁的查询:

{
  repository(owner: "kalessil", name: "phpinspectionsea") {
    ... on Github_Repository {
      object(expression: "master:docs/DEVELOPERS.md") {
        ... on Github_Blob {
          text
        }
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 2022-01-06
    • 2010-10-07
    • 2018-02-26
    • 1970-01-01
    • 2019-05-22
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多