Sanity.io GROQ:按跨文档引用次数获取高引用标签
GROQ实现跨文档类型标签引用统计方案
你可以通过「聚合所有引用来源的标签ID → 按标签ID匹配计数 → 排序切片」的逻辑实现需求,不需要依赖反向查询,执行效率更高。
可直接复用的GROQ代码(取全站引用Top10标签)
{ // 收集所有page、article文档中的标签引用ID,打平为一维列表 "allTagReferences": *[_type in ["page", "article"] && defined(tags) && !(_id in path("drafts.**"))]{ "refs": tags[]._ref }.refs[], // 遍历所有正式发布的标签,统计对应引用数 "topTags": *[_type == "tag" && !(_id in path("drafts.**"))]{ _id, label, "referenceCount": count(^.allTagReferences[@ == _id]) } // 按引用数倒序,取前10条 | order(referenceCount desc) | [0...10] }.topTags
逻辑说明
- 语句默认排除了所有草稿状态的文档、标签,如果需要统计草稿内容,删掉筛选条件里的
!(_id in path("drafts.**"))即可。 - 第一部分会把所有page、article下tags数组里的标签引用ID全部提取出来,一个ID出现一次就代表被引用一次,不会漏统计。
- 第二部分遍历每个标签时,会直接在前面收集的全量引用ID列表里匹配当前标签的
_id,匹配到的总数就是该标签在全站两类文档中的总引用量。 - 如果后续新增了其他带标签引用的文档类型(比如post、product等),只需要把新的类型名加到
["page", "article"]数组中,不需要修改其他逻辑。 - 如果不需要限制返回数量,直接删掉最后的
| [0...10]切片语句,就会返回所有标签按引用量从高到低排序的完整列表。
内容的提问来源于stack exchange,提问作者The Unknown
相关产品推荐
相关产品推荐

