GROQ: Query articles grouped by tags from list component in single query
Yes, absolutely! You can fetch all articles associated with each tag in a single GROQ query. The key is to use a projection that iterates over your tags array and fetches the related articles for each tag.
Here's how you can structure your query:
*[_type == "list_component" && _id == "dsf"][0] {
tags[]{
...,
"articles": *[_type == "article" && references(^._id)]
}
}Or if you want a cleaner structure with the tag as a key:
*[_type == "list_component" && _id == "dsf"][0] {
"taggedArticles": tags[]{
"tagName": name,
"tagId": _id,
"articles": *[_type == "article" && references(^._id)]
}
}How it works:
tags[]iterates over each tag in your tags array^._iduses the parent reference operator to refer back to the tag's_idin the enclosing scope*[_type == "article" && references(^._id)]finds all articles that reference the current tag- The
[0]after the first filter ensures you get a single object instead of an array
If your tags are stored as references (not inline objects), you might need to dereference them first:
*[_type == "list_component" && _id == "dsf"][0] {
"taggedArticles": tags[]-> {
"tagName": name,
"tagId": _id,
"articles": *[_type == "article" && references(^._id)]
}
}This gives you exactly what you're looking for - all tags with their associated articles in a single query! The ^ operator is the key here, allowing you to reference the parent tag's ID from within the nested query.
Show original thread5 replies
Sanity – Build the way you think, not the way your CMS thinks
Sanity is the developer-first content operating system that gives you complete control. Schema-as-code, GROQ queries, and real-time APIs mean no more workarounds or waiting for deployments. Free to start, scale as you grow.