如何使用GitHub GraphQL API筛选查询Projects Beta中符合特定字段值的议题
GitHub Projects Beta GraphQL API: 按字段筛选议题的解决方案
你提到的这个问题确实是GitHub Projects Beta API目前的一个限制——原生的projectV2Items查询暂时不支持直接按自定义字段值筛选,不过我们有两种可行的办法来实现你的需求:
1. 客户端侧筛选(最可靠的自定义字段筛选方案)
先获取项目中所有关联的议题及其字段值,然后在你的代码里过滤出符合条件的项。这是目前处理自定义字段筛选的通用方法,因为API还没提供原生支持。
举个GraphQL查询的例子,用来获取项目的议题及对应的字段值:
query GetProjectIssuesWithFields($projectId: ID!) { projectV2(id: $projectId) { title items(first: 100) { nodes { id fieldValues(first: 10) { nodes { ... on ProjectV2ItemFieldSingleSelectValue { name field { ... on ProjectV2Field { name } } } ... on ProjectV2ItemFieldTextValue { text field { ... on ProjectV2Field { name } } } # 根据你使用的字段类型,添加对应的片段 } } node { ... on Issue { id title number } } } } } }
拿到返回结果后,你可以遍历每个项目项,检查fieldValues里的字段名称和值是否匹配你的需求(比如筛选"状态"字段为"待处理"的议题)。
2. 结合GitHub搜索API(适用于议题原生属性+项目筛选)
如果你的筛选条件是议题本身的属性(比如标签、状态、作者),可以结合GitHub的搜索功能,通过project-id参数限定搜索范围在目标项目内。
比如用GraphQL的search查询,筛选某个项目中带有特定标签的议题:
query SearchIssuesInProject($query: String!) { search(query: $query, type: ISSUE, first: 100) { nodes { ... on Issue { id title number projectItems(first: 10) { nodes { project { ... on ProjectV2 { id title } } } } } } } }
你可以把$query变量设为类似project-id:YOUR_PROJECT_ID label:bug is:open这样的字符串,就能得到该项目中符合条件的议题。不过要注意,这种方法不支持自定义字段的筛选,只能用GitHub搜索语法支持的参数。
关于API支持的说明
截至目前,GitHub官方还没有在Projects Beta的GraphQL API中添加按自定义字段值筛选projectV2Items的参数,这个需求在开发者社区里也有不少反馈,后续可能会更新支持。
内容的提问来源于stack exchange,提问作者teocomi
相关产品推荐
相关产品推荐

