Convert String to Object for the Slug Type
2 replies
Last updated: May 10, 2022
O
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:
You'll need to install
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();
concurrent-queueand replace the
studioClientwith a client you configure. Then you'll run it using
sanity exec <path-to-script> --withUserToken
May 9, 2022, 5:22 PM
A
Hello thanks this works perfectly though I had to change the to
import { studioClient } from './studioClient';
import client from 'part:@sanity/base/client';
May 10, 2022, 9:33 AM
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.