Filtering arrays in a query and using match for comparison in Sanity.io.

5 replies
Last updated: Nov 11, 2023
Hi all, how can I filter out an array returned from a query?I have a query similar to this one

*[_type == 'movie']{..., actors}
where actors is an array of objects containing the role (
leading
,
support
, etc) and the reference to the actor. I need to filter out the actors array to only include ones in a leading role.
Nov 11, 2023, 3:40 PM
It sounds like you’ll be able to use the array filter syntax for this:

*[_type == 'movie']{
  ...,
  actors[leading == true], // or maybe...
  // actors[role == 'leading'],
}
Nov 11, 2023, 4:43 PM
Thanks, I don't know what I was doing wrong but I couldn't get it to work as I wanted... But hey, it works now ✌️
Nov 11, 2023, 7:18 PM
And if I wanted all artists named "James" it would be something like this right?

*[_type == 'movie']{
  actors[actor->name == 'James'],
}
Assuming
actors
has this shape:
actors: [
  {
    role: string,
    actor: reference,
  },
  // ...
]
Nov 11, 2023, 7:20 PM
Yes, if the
name
property is literally just James, then that should work. If it’s their full name or you want to do basic matching, you may want to consider using match rather than
==
.
Nov 11, 2023, 7:58 PM
Yup, I'm familiar with it. In this case it would be a full comparison rather than a partial match. Thanks again! ✨
Nov 11, 2023, 9:31 PM

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.

Was this answer helpful?