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

How to Query all the Documents that have the Same Start of the ID as the Current Document

4 replies
Last updated: Jul 16, 2020
Ahoy 🙂 I'm trying to query all the documents that have the same start of the ID as the current document. I want to collect the different language versions of the same document. The related docs have the same ID + language suffix
"_id":"627f6815-531b-42ad-962a-f4d41159ac68"
"_id":"627f6815-531b-42ad-962a-f4d41159ac68__i18n_de"
This is what I've tried but it does not work:

*[_type == "project"] | order(_updatedAt desc) {
	_id,
	'lang':__i18n_lang, 
	title,
	'slug': slug.current,
// This is the bit that doesnt work
	"translated": *[_id match ^._id + "*"] { ... }
}
This is my document list that I'm trying to collate:

"result":[
  0:{
    "_id":"627f6815-531b-42ad-962a-f4d41159ac68"
    "lang":"en"
    "slug":"all-football-everything"
    "title":"All Football Everything"
  }
  1:{
    "_id":"627f6815-531b-42ad-962a-f4d41159ac68__i18n_de"
    "lang":"de"
    "slug":"alles-fussball-alles"
    "title":"Alles Fußball Alles"
  }
]
I would like a result that looks like this:

{
  "_id":"627f6815-531b-42ad-962a-f4d41159ac68"
  "lang":"en"
  "slug":"all-football-everything"
  "title":"All Football Everything"
  "translated":{
    "_id":"627f6815-531b-42ad-962a-f4d41159ac68__i18n_de"
    "lang":"de"
    "slug":"alles-fussball-alles"
    "title":"Alles Fußball Alles"
  }
}
Is there a way of doing this? (Using
sanity-plugin-intl-input
)
Jul 15, 2020, 1:02 PM
Ahoy JD! Strange indeed that
match
doesn’t seem to let you use
^._id
in this case, giving an internal server error. I’ll flag this one internally, thanks.
For now, you could work around it as follows:

...
"translated": *[_id > ^._id && _id < ^._id + "a"]
...
Jul 15, 2020, 2:25 PM
Thanks for that Peter! Your suggestion works for finding
d8b5616a-b376-4f16-929f-57b517100b43__i18n_de
from
d8b5616a-b376-4f16-929f-57b517100b43
but not for finding
d8b5616a-b376-4f16-929f-57b517100b43
from
d8b5616a-b376-4f16-929f-57b517100b43__i18n_de
. Is there a way to link the shorter ID to the longer one?What I'm trying to achieve is a language switcher that links to the translated doc no matter what document you are on
Jul 15, 2020, 2:50 PM
Hey again - how about this one? 🙂
...
"translated": *[(_id > ^._id && _id < ^._id + "a") || (^._id > _id && ^._id < _id + "a")]
...
Jul 15, 2020, 6:11 PM
Works! You're a legend. Thanks
Jul 16, 2020, 7:21 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.

Was this answer helpful?