如何在 graphql 查询中按文件扩展名过滤
Posted
技术标签:
【中文标题】如何在 graphql 查询中按文件扩展名过滤【英文标题】:How to filter by a file extension in a graphql query 【发布时间】:2019-09-10 10:37:24 【问题描述】:我想查询存储库中 docs 文件夹中的 markdown 文件的内容。我正在使用gatsby-source-graphql 和GitHub 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 解决。而且从 *** 获得的帮助也很少,太新了。如果这里没有进一步的帮助,您可以尝试在GitHub community forums 上提问。我很想看看你的想法!
附带说明,可以删除... on GitHub_Repository
并在repository
查询之后直接使用object
。
【参考方案1】:
跟进我的comment:如果您想查询特定文件的内容(如您的示例中),您可以使用这个更简洁的查询:
repository(owner: "kalessil", name: "phpinspectionsea")
... on Github_Repository
object(expression: "master:docs/DEVELOPERS.md")
... on Github_Blob
text
【讨论】:
以上是关于如何在 graphql 查询中按文件扩展名过滤的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的 schema.graphql 文件中为按 id 过滤的查询引用生成的 Prisma 模式
在原生 Android 文件选择器中按 mime 类型或扩展名过滤
如何在 JSON 文件上运行的 GraphQL 上应用过滤器?
使用 apollo-express 限制或过滤 graphql 查询