You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过GraphQL筛选GitHub项目中已关闭状态的卡片?

解决GitHub项目中用GraphQL筛选已关闭Issue卡片的问题

我明白你遇到的痛点——因为Project Cards是UNION类型,没法直接在顶层加筛选条件,得用GitHub GraphQL里的**内联片段(inline fragments)**或者针对Project V2的专属筛选参数来处理,下面分两种情况给你具体方案:

如果你用的是GitHub Project V2(新版项目)

新版Project的API设计更友好,直接在items的filter参数里就能指定内容类型和状态,不用绕弯子。比如下面这个查询,就能直接拉取项目中所有已关闭的Issue卡片:

query GetClosedIssueProjectCards {
  repository(owner: "你的用户名", name: "你的仓库名") {
    projectV2(number: 1) { # 替换成你的项目编号
      items(
        first: 20 # 可调整返回数量
        filter: {
          content: {
            type: ISSUE
            state: CLOSED
          }
        }
      ) {
        nodes {
          id
          content {
            ... on Issue {
              title
              number
              state
              closedAt
            }
          }
        }
      }
    }
  }
}

原理很简单:filter.content.type先锁定我们要的是Issue类型,再通过state: CLOSED筛选已关闭的卡片,完美避开UNION类型的限制。

如果你用的是旧版GitHub Project(V1)

旧版的Project Card API没有直接的筛选参数,这时候就得靠内联片段来针对性过滤。你可以在查询content时,只对Issue类型提取字段,并且后续可以在客户端或者结合搜索来筛选已关闭状态:

方案1:直接查询卡片并过滤

query GetOldProjectClosedIssues {
  repository(owner: "你的用户名", name: "你的仓库名") {
    project(number: 1) { # 替换成旧版项目编号
      columns(first: 10) {
        nodes {
          cards(first: 10) {
            nodes {
              content {
                ... on Issue {
                  title
                  number
                  state
                }
              }
            }
          }
        }
      }
    }
  }
}

拿到结果后,你只需要在本地过滤state为CLOSED的条目就行。

方案2:用搜索API更高效

如果项目卡片很多,本地过滤效率低,推荐用GitHub的搜索查询,直接定位到仓库里属于该项目的已关闭Issue:

query SearchClosedIssuesInOldProject {
  search(
    query: "repo:你的用户名/你的仓库名 is:issue is:closed project:1", # project:后面是旧版项目编号
    type: ISSUE,
    first: 20
  ) {
    nodes {
      ... on Issue {
        title
        number
        state
        projectCards(first: 5) {
          nodes {
            column {
              name
            }
          }
        }
      }
    }
  }
}

关键知识点回顾

UNION类型的核心限制是:你不能直接在UNION字段上添加只有某种子类型才有的字段(比如Issue的state),必须用... on 子类型的语法,明确指定要处理的类型后,才能使用该类型专属的字段和筛选条件。

内容的提问来源于stack exchange,提问作者berto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:17:27