git - 如何在 graphql 查询中按文件扩展名过滤
问题描述
我想查询存储库中 docs 文件夹内的降价文件的内容。我正在使用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
并且需要额外的工作才能过滤掉。
有没有办法只md
在目录中查询带有扩展名的docs/
文件?
编辑:
可以分三步完成。首先通过查询所有文件,过滤然后查询单个文件:
{
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
}
}
}
}
}
}
}
}
也许有更好的方法?
编辑2:
我已经根据@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 Github_Repository {
object(expression: "master:docs/DEVELOPERS.md") {
... on Github_Blob {
text
}
}
}
}
}
推荐阅读
- javascript - 通过两个键过滤和求和lodash中的数据
- python - NameError:名称未定义。尽管名称已定义,为什么 Python 仍会抛出此错误?
- google-cloud-platform - Airflow Dag 永远不会按照 Google Composer 上的计划运行
- java - 如何更改起始活动?
- database - 检查 CosmosDB 的集合中是否存在分区键
- c# - Zmq/NetMQ Push 偶尔失败并在 TrySendFrame 处返回 false
- sql - 子查询中为 NOT 的 Null
- svn - Subversion:如何解决合并中的冲突 --reintegrate?
- javascript - 使用 Jquery/Javascript 根据下拉选项删除元素
- python - 为什么即使使用 del 和 gc 也不能在 python 中释放内存?