Как сравнивать массивы в 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

Другими словами, он фильтрует теги по тому, появляется ли каждый тег в другом списке. Дополнительный ^.здесь необходимо, так как фильтр вводит новую область.

Другие вопросы по тегам