Skip to content
CODELAND
← All news & press
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 in five minutes for 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

queries.ts
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