When working with Sanity.io, you’ll encounter GROQ (Graph-Relational Object Queries), a powerful and flexible query language used to fetch data from Sanity's backend. GROQ is tailored for Sanity's document store and offers a simple yet expressive syntax for querying your content.
Let’s explore the fundamentals of GROQ and how it helps retrieve data effectively.
GROQ is a query language designed specifically for Sanity.io. It allows developers to:
Unlike GraphQL, GROQ is less rigid and gives you greater flexibility in how you shape and retrieve data.
Flexible Syntax: Query documents with intuitive syntax.
Filtering: Apply conditions to fetch only the required data.
Projections: Shape the output to match your needs.
Traversals: Navigate through references and deeply nested objects.
To fetch all documents of a specific type, use:
groqCopy code*[_type == "blogPost"]
This query retrieves all documents with _type set to blogPost.
You can filter documents by adding conditions:
groqCopy code*[_type == "blogPost" && title match "GROQ*"]
This fetches all blogPost documents where the title starts with "GROQ".
Use projections to select specific fields:
groqCopy code*[_type == "blogPost"] {
title,
slug,
publishedAt
}
This returns only the title, slug, and publishedAt fields for each blog post.
You can sort results using the | order() function:
groqCopy code*[_type == "blogPost"] | order(publishedAt desc)
This fetches all blog posts sorted by publishedAt in descending order.
Use start and end to paginate results:
groqCopy code*[_type == "blogPost"] | order(publishedAt desc)[0...5]
This retrieves the first five blog posts based on their publish date.
GROQ lets you resolve references and include related data:
groqCopy code*[_type == "blogPost"] {
title,
author->{
name,
bio
}
}
The -> operator navigates the reference to fetch the name and bio of the author.
GROQ supports various functions for transforming data. For example:
Example:
groqCopy codecount(*[_type == "blogPost"])
This returns the total number of blog posts.
Here’s a GROQ query that fetches blog posts along with their author’s details and the first image in the post body:
groqCopy code*[_type == "blogPost"] {
title,
slug,
author->{
name,
bio
},
"mainImage": body[0].asset->url
}
GROQ is a fantastic tool for querying content in Sanity. Its flexibility and intuitive syntax make it easy to fetch and shape data as needed. By mastering GROQ, you’ll unlock the full potential of Sanity’s powerful content management capabilities.