Is it possible to fetch more than one "_type" using GROQ?

4 replies
Last updated: Nov 2, 2020
Hey - been stuck with my head in the sanity/next.js documentation for quite som time now and can't seem to find the answer that i'm looking for... But does anyone of you guys know, if it's possible to fetch more than one "_type" using GROQ? Let's say that i have a schema for my "frontpage" and my "blog-post" and i want to display them on the same page? This seems so easy with Graphql but i'm really struggling to wrap my head around how i'm supposed to do it in GROQ?
Thanks in advance
🙂
Nov 2, 2020, 10:01 AM
Hi Morgan! You can fetch multiple document types as follows:
*[_type in ["frontpage", "blogPost"]]
Nov 2, 2020, 10:06 AM
you might get weird results though if you have fields with the same name but different type.
Nov 2, 2020, 10:22 AM
That’s a great point Arjen! To prevent that from happening, you can specify projections for the different types, e.g.:
*[_type in ["frontpage", "blogPost"]]{
  _type == "frontpage" => {
    // Your field selection for the frontpage type
  },
  _type == "blogPost" => {
    // Your field selection for the blogPost type
  }
}
Nov 2, 2020, 10:27 AM
Wow thanks, both of you!
Nov 2, 2020, 10:28 AM

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?