Array with multiple reference types causing schema validation error
Yes, you can have an array with multiple reference types! The error you're hitting is because Sanity requires each item in the of array to be uniquely identifiable.
The Problem
When you have multiple entries in the of array with the same type, Sanity can't tell them apart unless you give them unique name properties. From the Sanity documentation on array schemas, this won't work:
{
type: 'array',
name: 'items',
of: [
{ type: 'reference', to: [{type: 'author'}] },
{ type: 'reference', to: [{type: 'book'}] }, // Both are type: 'reference'!
]
}The Solution
Add a unique name property to each reference definition:
{
type: 'array',
name: 'items',
of: [
{
type: 'reference',
name: 'authorReference', // Unique name
to: [{type: 'author'}],
title: 'Author'
},
{
type: 'reference',
name: 'bookReference', // Different unique name
to: [{type: 'book'}],
title: 'Book'
},
{
type: 'reference',
name: 'articleReference',
to: [{type: 'article'}],
title: 'Article'
}
// Add as many as you need!
]
}Each array item will have its _type set to the name you specified (e.g., authorReference, bookReference), which allows Sanity to distinguish between them.
Why This Helps Your Use Case
You mentioned that having a single reference with many to values makes it hard to find specific documents because hundreds of results appear. By splitting them into separate named references, you can:
- Group by type - Each reference type appears as a separate option in the Studio UI
- Better UX - Users select the type of reference first, then search within that specific document type
- Cleaner queries - Your GROQ queries will be more manageable since each reference has a distinct
_type
The array will store data like:
[
{"_type": "authorReference", "_ref": "author-123"},
{"_type": "bookReference", "_ref": "book-456"}
]This approach gives you dozens of reference types in a single array while maintaining a clean, organized interface!
Show original thread12 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.