Querying categories and posts in Sanity.io using GROQ
7 replies
Last updated: Jun 10, 2021
D
Hi! First project w/ Sanity and since it seemed easiest (because it was the example in the tutorial š¤·āāļø) and I thought I could modify it later I chose Blog as a template.I'm doing a site where I'm going to display different categories of handicrafts - with name/title and an image (used Post to set up this).
I've added all the different categories in Category and connected each post to the correct category.
My question is, is it possible to query on category, and how do I do that?
I've added all the different categories in Category and connected each post to the correct category.
My question is, is it possible to query on category, and how do I do that?
Jun 10, 2021, 8:42 AM
H
What exactly do you want to do? Do you want to get all categories and their posts? In GROQ that would be this query
This gets every category, and for each category it gets every
*[ _type == "category"]{ ..., "posts": *[_type=="post" && references(^._id ) }
postthat references that category. This is done using the
^parent-operator ( https://www.sanity.io/docs/groq-operators#3715ad969fce ) and the
references-function ( https://www.sanity.io/docs/groq-functions#5759ed6ff047 ).
Jun 10, 2021, 9:26 AM
D
I will have links to each category and when I click a specific link I want to query and see all posts for that category. For example this one:
Jun 10, 2021, 9:34 AM
H
Do note that this query will also include drafts unless you explicitly exclude them with
https://www.sanity.io/docs/groq-operators#c06332116311 filter:
https://www.sanity.io/docs/how-queries-work#e9a260f5e979
&& !(_id in path("drafts.*"))inside the filter-component (
[ ]). Path: https://www.sanity.io/docs/groq-functions#0ecd1b7eac78 In:
https://www.sanity.io/docs/groq-operators#c06332116311 filter:
https://www.sanity.io/docs/how-queries-work#e9a260f5e979
Jun 10, 2021, 9:34 AM
H
In that case the first query seems like it should match. It can be extended with
and you pass in the
A simpler version could be:
depending on if you need any information on the given category this could be extended to
dereference:
https://www.sanity.io/docs/groq-operators#dae298fc7952
*[ _type == "category" && _id == $id]{ ..., "posts": *[_type=="post" && references(^._id ) }
_idof the category you want to find all posts for in order to only get the relevant data for that category.
A simpler version could be:
*[ _type=="post" && references($id)]
*[ _type=="post" && references($id)]{..., category-> }
https://www.sanity.io/docs/groq-operators#dae298fc7952
Jun 10, 2021, 9:38 AM
D
Thank you! Will try it out š
Jun 10, 2021, 9:39 AM
H
docs on parameters that I used: https://www.sanity.io/docs/groq-parameters
Jun 10, 2021, 9:40 AM
H
Good luck š
Jun 10, 2021, 9:40 AM
Sanityā build remarkable experiences at scale
Sanity is a modern headless CMS that treats content as data to power your digital business. Free to get started, and pay-as-you-go on all plans.