Как сравнивать массивы в GROQ
У меня есть блог с здравомыслящей 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]
}
Я бы перевел свой запрос так: «Я хочу получить похожие сообщения, которые имеют другой слаг и владеют хотя бы одним тегом, также принадлежащим текущему сообщению».
1 ответ
Трюк с подсчетом должен работать, но, поскольку вы сравниваете несколько тегов с несколькими тегами, вам нужно перебирать их:
count(tags[@ in ^.^.tags]) > 0
Другими словами, он фильтрует теги по тому, появляется ли каждый тег в другом списке. Дополнительный
^.
здесь необходимо, так как фильтр вводит новую область.