Create a count for related items using GROQ

Oct 25, 2022

I'm using the count() function of GROQ queries to display the number of posts for a tag on my tags page, but it can be used for anything that would have a varying number of items.

To count items using GROQ is as simple as using the count() function.

1{ 2 // Get an array of all completed items 3 "items": *[completed == true] 4} | { 5 // use count function to count the key 6 "count": count(items) 7} 8 9// => { "count": 90 }

Of course this can be reduced to a single query:

1{ 2 // Get an array of all completed items and count them 3 // use count function to count the key 4 "count": count(*[completed == true] ) 5} 6 7// => { "count": 90 }

This can also be done with any field, including references which we can do like so:

1*[_type == "tag" ]{ 2 // Get all items that reference the current tag 3 "refs": *[references(^._id)] {} 4 } | { 5 // count each reference 6 "count": count(refs) 7 }[count > 0] //filter out tags with 0 referenced items

Again, this can be shortened to a single query:

1*[_type == "tag" ]{ 2 // Get all items that reference the current tag and count them 3 "count": count(*[references(^._id)]) 4 }[count > 0] //filter out tags with 0 referenced items