如何在 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
换句话说,它根据每个标签是否出现在另一个列表中来过滤标签。这里应该需要额外的 ^.
,因为过滤器引入了一个新的范围。
我有一个带有 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
换句话说,它根据每个标签是否出现在另一个列表中来过滤标签。这里应该需要额外的 ^.
,因为过滤器引入了一个新的范围。