Sanity技术求助:如何按类别数组筛选Post内容
实现Sanity多类别数组筛选帖子的GROQ查询修改
原查询仅支持单个类别筛选,以下是修改后的版本,支持传入类别slug数组进行筛选:
版本1:筛选包含至少一个指定类别的帖子(最常用场景)
*[_type == "post" && defined(slug.current) && (!defined($search) || title match $search || publishedAt match $search || author->name match $search) && defined($categories) && categories[]->slug.current overlaps $categories ] | order(publishedAt desc) { title, publishedAt, "categories": coalesce( categories[]->{ _id, slug, title }, [] ), author->{ name } }
版本2:筛选包含所有指定类别的帖子
如果需要帖子必须同时属于数组里的所有类别,可使用以下条件替换上面的类别筛选逻辑:
&& defined($categories) && all($cat in $categories => $cat in categories[]->slug.current)
关键修改说明
- 将单个类别参数
$category改为数组参数$categories,明确参数类型 - 使用
overlaps操作符快速判断两个数组是否有交集(适用于“至少一个匹配”的场景) - 修复了原查询中的笔误:
order(publishAt desc)改为order(publishedAt desc),避免排序报错
内容的提问来源于stack exchange,提问作者Jeene Simon
相关产品推荐
相关产品推荐

