Watch a live product demo 👀 See how Sanity powers richer commerce experiences

Convert String to Object for the Slug Type

2 replies
Last updated: May 10, 2022
Hello, can’t seem to find any related issue on the web so I’m going to ask here. I wanted to know if there’s a way to convert the string to object for the slug type? Currently I have an old sanity data that using string as slug, and wanted to convert the type to slug for better schema. Somehow I have to regenerate all my data which are too many now.
May 9, 2022, 2:06 PM
Hey there! You can use mutations to batch edit any slug fiend you have defined. I'll usually create a script that handles it. Something like this should get you started:
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: 2 })
  .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(slug)]`;
  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
      studioClient
        .patch(doc._id)
        // Set the field
        .set({
          slug: {
            _type: 'slug',
            current: doc.slug
          }
        })
        .commit()
        .then((updatedDoc) =>
          console.log(`Hurray, the doc is updated! New document:`, updatedDoc)
        )
        .catch((err) =>
          console.error('Oh no, the update failed: ', err.message)
        );
    });
  }
};

mutateDocs();
You'll need to install
concurrent-queue
and replace the
studioClient
with a client you configure. Then you'll run it using
sanity exec <path-to-script> --withUserToken
May 9, 2022, 5:22 PM
Hello thanks this works perfectly though I had to change the
import { studioClient } from './studioClient';
to
import client from 'part:@sanity/base/client';
May 10, 2022, 9:33 AM

Sanity.io – build remarkable experiences at scale

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

Categorized in

Related answers

Get more help in the community Slack

TopicCategoriesFeaturedRepliesLast Updated
After adding the subtitle and running this code npm run graphql-deploy It does nothingSep 15, 2020
how to limit a reference to just one entry in Studio reference input side versus the default as-many-entries-as-you-fill-in-an-array...Sep 18, 2020
Is it possible to fetch more than one "_type" using GROQ?Nov 2, 2020
I want to add a view with the Structure builder (S.view.component) where I list similar documents based on the title. What...Sep 23, 2020
Is there a structure builder example where the format of each preview for the document list is modified?Feb 3, 2021
I have an array of references to a country schema type but it always just returns NULL values for meJan 30, 2021
Hi, I need help with a query for getting the url of an image asset. Here is what I've been trying, but I only get the _ref...Dec 1, 2020
Sanity UI looks brilliant :smiley: Is something like the current date picker possible at the moment? I’m not sure if anicon...Dec 21, 2020
Hey everyone. I have been coding and may have potentially accidentally deleted something. Does anyone know how to resolve...Dec 26, 2020
Hello everyone and happy new year :raised_hands::skin-tone-2:, I have a problem with outputting Portable Text :disappointed:...Jan 1, 2021

Related contributions

Clean Next.js + Sanity app
- Template

Official(made by Sanity team)

A clean example of Next.js with embedded Sanity ready for recomposition.

Cody Olsen
Go to Clean Next.js + Sanity app

Blog with Built-in Content Editing
- Template

Official(made by Sanity team)

A Sanity-powered blog with built-in content editing and instant previews.

Go to Blog with Built-in Content Editing