🔮 Sanity Create is here. Writing is reinvented. Try now, no developer setup

Querying documents with the same start of the ID and collecting different language versions.

7 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
user A
is this maybe something you've encountered before?
Jul 15, 2020, 2:20 PM
Ahoy User! 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
Ahoy User! 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
user A
is this maybe something you've encountered before?
Jul 15, 2020, 2:20 PM
Thanks for that User! 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?