如何在 GROQ 中比较数组

How to compare arrays in GROQ

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

我的标签在 post 架构中是这样描述的:

{
  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]
}

我要将我的查询翻译成:“我想获得相关的 posts,它们具有不同的 slug 并且拥有至少一个标签,该标签也属于当前 post"

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

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

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