Налаштування GROQ-запитів для Sanity
GROQ (Graph-Relational Object Queries) — мова запитів Sanity. Не REST, не SQL, не GraphQL. Гнучкіша за REST для складних структур: проекції, join через ->, умовні вибірки, агрегації — все в одному запиті без проблем N+1.
Базовий синтаксис
// Усі документи post
*[_type == "post"]
// З умовою
*[_type == "post" && status == "published"]
// Сортування та пагінація
*[_type == "post"] | order(publishedAt desc) [0...10]
// Проекція — вибрати конкретні поля
*[_type == "post"] {
_id,
title,
"slug": slug.current,
publishedAt
}
Resolve (join через ->)
// Заповнити пов'язані документи
*[_type == "post"] {
title,
"author": author->{ name, avatar },
"categories": categories[]->{ title }
}
Умовні проекції
// Різні поля залежно від _type (для динамічних зон)
*[_type == "page"] {
title,
"sections": sections[] {
_type,
_type == "hero" => { heading, image },
_type == "textBlock" => { content }
}
}
Параметризовані запити
const query = `*[_type == "post" && slug.current == $slug][0] { title }`
const post = await client.fetch(query, { slug: 'my-post' })
Агрегації
// Кількість опублікованих статей
count(*[_type == "post" && status == "published"])
// Унікальні значення
array::unique(*[_type == "post"].status)
Повнотекстовий пошук
*[_type == "post" && [title, pt::text(body)] match $q]
Терміни
Розробка GROQ запитів для 4–6 типів сторінок — 1–2 дні.







