How to Transform the Output of a String Inside GROQ

6 replies
Last updated: Jun 23, 2021
Hey all, is it possible to transform the output of a string (inside GROQ)? I’m building a nav schema which is an array of parent, child references. Parent references are optional and I’m falling back to the title specified as the base “slug” for children.
Trying to achieve something like this…


  *[_type == "navigation"] {
    items[] {
      // Can I "slugify" the "title"?
      "slug": coalesce(page->slug.current, title),
      children[] {
        "slug": page->slug.current,
      }
    }
  }
Happy to “slugify” the value returned for slug but was just wondering about the possibility of doing this inside GROQ itself
Jun 23, 2021, 2:33 AM
i don’t believe there is a pattern for this type of replace/string modification in groq
Jun 23, 2021, 2:34 AM
you could however fetch the first child? to be the default slug
Jun 23, 2021, 2:35 AM
i regularly slugify titles for things like FAQ sections though, probably something similar you are after, but i do that in the frontend.
Jun 23, 2021, 2:36 AM
you could also maybe auto-generate a slug in a hidden custom field if you really don’t want to do it in the frontend and don’t want the client to see it in the editor?
Jun 23, 2021, 2:38 AM
Oooh ok I figured that might be the case. Good tip RE the hidden field, I think I’ll just do it client side though 🙂
Jun 23, 2021, 2:40 AM
yeah more control that way, hiding things never ends well.
Jun 23, 2021, 2:45 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