News
22 September 2026 · 1 min · Eric Mugisha
GROQ in five minutes for AEM developers
If you know JCR-SQL2 and Sling Models, GROQ will feel familiar: filter, follow references, shape the output, all in one query.
- GROQ
- AEM
- Developers

In AEM, a component usually combines a JCR query with a Sling Model to shape data for HTL. In Sanity, one GROQ query does both jobs.
1. Filter
*[_type == "service" && language == "en"] | order(order asc)2. Project (choose fields)
*[_type == "service" && language == "en"]{title, "slug": slug.current, summary}3. Follow references
*[_type == "caseStudy"]{title, "services": services[]->title}4. Type-safe in the frontend
import {defineQuery} from 'next-sanity'
export const SERVICES_QUERY = defineQuery(`*[_type == "service" && language == $lang]{title}`)
// sanity typegen generate → SERVICES_QUERY_RESULT is generated for you