Querying documents with the same start of the ID and collecting different language versions.
7 replies
Last updated: Jul 16, 2020
J
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
This is what I've tried but it does not work:
This is my document list that I'm trying to collate:
I would like a result that looks like this:
Is there a way of doing this? (Using
"_id":"627f6815-531b-42ad-962a-f4d41159ac68" "_id":"627f6815-531b-42ad-962a-f4d41159ac68__i18n_de"
*[_type == "project"] | order(_updatedAt desc) { _id, 'lang':__i18n_lang, title, 'slug': slug.current, // This is the bit that doesnt work "translated": *[_id match ^._id + "*"] { ... } }
"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" } ]
{ "_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" } }
sanity-plugin-intl-input)
Jul 15, 2020, 1:02 PM
S
user A
is this maybe something you've encountered before?Jul 15, 2020, 2:20 PM
M
Ahoy User! Strange indeed that
For now, you could work around it as follows:
matchdoesn’t seem to let you use
^._idin 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
P
Ahoy User! Strange indeed that
For now, you could work around it as follows:
matchdoesn’t seem to let you use
^._idin 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
J
user A
is this maybe something you've encountered before?Jul 15, 2020, 2:20 PM
J
Thanks for that User! Your suggestion works for finding
d8b5616a-b376-4f16-929f-57b517100b43__i18n_defrom
d8b5616a-b376-4f16-929f-57b517100b43but not for finding
d8b5616a-b376-4f16-929f-57b517100b43from
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
P
Hey again - how about this one? 🙂
... "translated": *[(_id > ^._id && _id < ^._id + "a") || (^._id > _id && ^._id < _id + "a")] ...
Jul 15, 2020, 6:11 PM
J
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.