✨Discover storytelling in the AI age with Pixar's Matthew Luhn at Sanity Connect, May 8th—register now

Finding references to a deprecated component in Sanity schemas and documents.

9 replies
Last updated: Sep 20, 2022
I’m deprecating a component. Is there an easy way to find all documents which reference a specific schema as a block?
Sep 20, 2022, 6:30 PM
There is! You can find it using:
Though, I'm unclear from your question whether the component you're deprecating is a document you're referencing, some schema that isn't a document, or a schema inside of block content. That query will only work if it's a reference to a document.
Sep 20, 2022, 6:33 PM
Sorry, for being unclear. The schema is for an object not a document.
Sep 20, 2022, 6:35 PM
e.g. find all documents that use the custom form block.
Sep 20, 2022, 6:36 PM
No worries, just wanted to make sure I'm giving you relevant information.
Does that object always have the same name when you use it in your schema? If so, something like
should get it for you. If that's not the case, I"m afraid there's not an easy way to find each place it's used.
Sep 20, 2022, 6:37 PM
thx, and where would you be executing that query?
Sep 20, 2022, 6:38 PM
The schema looks roughly like this:
title: 'body',
type: 'array',
of: [
 { type: block, .... },
 { type: 'custom-form'},
 { ... ~100 components }
Sep 20, 2022, 6:39 PM
I usually write a JS script that I can use to batch remove a field that performs that query. Here's an example:
import { studioClient } from './studioClient';
import cq from 'concurrent-queue';

// Create a queue to limit the rate at which you write changes to Sanity
let queue = cq()
  .limit({ concurrency: 25 })
  .process(task => {
    return new Promise(function (resolve, reject) {
      setTimeout(resolve.bind(undefined, task), 1000);

const mutateDocs = async () => {
  //Fetch the documents you need to mutate
  const query = `*[defined(<name-of-field>)]`;
  const docs = await studioClient.fetch(query);
  // Loop through all of the docs returned from our query
  for (const doc of docs) {
    queue(doc).then(async () => {
      // Add a message to help us know the upload is happening
      console.log(`Mutating ${doc._id}`);
      // Tell the client to patch the current document
        // Unset the field
        // Commit the changes
        .then(updatedDoc =>
          console.log(`Hurray, the doc is updated! New document:`, updatedDoc)
        .catch(err => console.error('Oh no, the update failed: ', err.message));


// execute this script by running
// $ sanity exec ./lib/utils/mutateDocs.js --withUserToken
It looks like you're using that custom-form inside of block content, so your query will need to be more complicated than just using the
function. You'll probably need to do something like
*['custom-form' in body[]._type]
Sep 20, 2022, 6:48 PM
Your patch will also have to be more complicated than my example.
Sep 20, 2022, 6:48 PM
k, thanks for the pointers
Sep 20, 2022, 8:14 PM

Sanity– build remarkable experiences at scale

Sanity is a modern headless CMS that treats content as data to power your digital business. Free to get started, and pay-as-you-go on all plans.

Was this answer helpful?