使用GitHub GraphQL API按状态及里程碑筛选ProjectV2中的项
用GitHub GraphQL API筛选ProjectV2项的解决方案
要实现按状态或里程碑筛选ProjectV2中的项,你需要在items字段中添加filter参数,利用GitHub GraphQL提供的ProjectV2ItemFilter进行条件过滤。以下是两种场景的具体实现:
1. 筛选状态为CLOSED或MERGED的Issue/Pull Request
修改后的查询代码如下,重点是添加filter参数,通过contentFilters分别指定Issue和PR的状态条件:
query getProject($projectOwnerName: String!, $projectNumber: Int!) { organization(login: $projectOwnerName) { projectV2(number: $projectNumber) { items( first: 10 # 筛选条件:匹配CLOSED的Issue,或MERGED/CLOSED的PR filter: { contentFilters: [ { issue: { state: CLOSED } } { pullRequest: { state: MERGED } } { pullRequest: { state: CLOSED } } ] } ) { pageInfo { endCursor hasNextPage hasPreviousPage startCursor } totalCount nodes { content { ... on Issue { title url state } ... on PullRequest { title url state } } } } } } }
说明:
contentFilters是数组,支持多个条件的或逻辑(满足任一条件即匹配)- Issue的状态选项仅包含
OPEN和CLOSED,Pull Request的状态选项包含OPEN、CLOSED、MERGED - 若只需筛选MERGED的PR,可去掉
pullRequest: { state: CLOSED }这一项
2. 按里程碑筛选
如果要筛选属于特定里程碑的Issue/PR,替换filter参数为里程碑条件即可,示例如下(以里程碑名称匹配为例):
query getProject($projectOwnerName: String!, $projectNumber: Int!, $milestoneTitle: String!) { organization(login: $projectOwnerName) { projectV2(number: $projectNumber) { items( first: 10 # 筛选匹配指定里程碑的内容 filter: { contentFilters: [ { issue: { milestone: { title: $milestoneTitle } } } { pullRequest: { milestone: { title: $milestoneTitle } } } ] } ) { pageInfo { endCursor hasNextPage hasPreviousPage startCursor } totalCount nodes { content { ... on Issue { title url state milestone { title } } ... on PullRequest { title url state milestone { title } } } } } } } }
说明:
- 新增
$milestoneTitle变量,用于传入目标里程碑的名称 - 也可通过里程碑的
number或id匹配,比如milestone: { number: 5 } - 若需同时结合状态和里程碑筛选,将两种条件都加入
contentFilters数组即可(当前GitHub GraphQL对ProjectV2暂不支持复杂的与逻辑,如需精确的与匹配需自行后续处理结果)
内容的提问来源于stack exchange,提问作者Minh Nguyen
相关产品推荐
相关产品推荐

