1

我有一个带有 sanity CMS 的博客,我想根据当前帖子中的相应标签请求相关帖子,这意味着我必须比较两个标签数组。

我的标签以这种方式在帖子模式中描述:

{
  name: 'tags',
  title: 'Tags',
  type: 'array',
  of: [{type: 'string'}],
  options: {
    layout: 'tags'
  }
},

我使用了以下 GROQ 查询,我猜这是一个好的开始,但显然它不起作用:

*[_type == "post" && slug.current == $slug][0] {
  title,
  tags,
  "sameTags": *[_type == "post" && slug.current != $slug && count(tags in ^.tags) > 0]
}

我将我的查询翻译为:“我想获得相关的帖子,这些帖子有不同的 slug 并且拥有至少一个标签也属于当前帖子”

4

1 回答 1

2

计数技巧应该有效,但由于您正在将多个标签与多个标签进行比较,因此您需要遍历它们:

count(tags[@ in ^.^.tags]) > 0

换句话说,它通过每个标签是否出现在另一个列表中来过滤标签。^.这里应该需要额外的,因为过滤器引入了一个新的范围。

于 2022-03-01T13:26:25.797 回答