Issue with nested references in GROQ query in Slack thread
11 replies
Last updated: Oct 23, 2020
S
OK, so I have a document that contains an array objects, and each object have a reference to another document. GROQ, exemplified with books:
Problem here is that
*[_type == "collection"] {
"title": collection_title,
"books": collection_books[]{
"title": collection_book->book_title,
"persons": collection_book->persons[]{
"type": type,
"firstname": person->firstname
}
}
}
Problem here is that
person->firstnamedoesn't return anything. If I just write
personthen _ref and _type is returned as expected, but -> doesn't seem to work. Are there some limitations on -> when nested like this?
Oct 18, 2020, 3:05 PM
T
Try
person->.firstnameand if they’re already named
typeand
firstnameyou could try
{ type, person->.firstname }
Oct 18, 2020, 3:46 PM
S
Sorry, User, but doesn't help. But, thanks! type is returned correctly, as that is a value in the object, but person-> is a reference, and doesn't return anything.
If I use
If I use
person->.firstnameinstead of
"firstname": person->.firstnameI get an error: "Must be an attribute or a string key".
Oct 18, 2020, 3:55 PM
T
try
"firstname": @->.firstname
Oct 19, 2020, 11:30 AM
S
@denotes the current item in the array
Oct 19, 2020, 11:30 AM
S
Actually, it depends on your data structure, so an example document would help
Oct 19, 2020, 11:33 AM
J
I solved this particular case by rewriting the structure of the query to a more suitable format. Anyways, I ran into another case of the same:
comments and type works fine, but url returns nothing. I "hacked" it by doing some string replacements on
"files": collection_set->set_downloads[]{ "comments": download_comments, "type": download_type, "url": download_file.asset->url },
download_file.asset["_ref"]instead, but should be fixed the correct way. Tried with @, but no luck. Some relevant schemas attached.
Oct 19, 2020, 5:55 PM
P
user J
☝️Oct 22, 2020, 6:16 PM
J
That looks correct to me. Is it a public dataset? If so you could send me an http url with query and I could tinker with it to see if there's something we're missing
Oct 22, 2020, 6:43 PM
J
Sure! See PM. Thanks!
Oct 22, 2020, 6:55 PM
J
This seems to work, you get the extra
set_downloadslevel, tho. But at least you get the url
*[_type == 'collection']{ "files": collection_sets[]{ ...@.collection_set->{ set_downloads[]{ "comments": download_comments, "type": download_type, "url": download_file.asset->url } } } }
Oct 22, 2020, 7:14 PM
J
Thanks, this works!
Oct 23, 2020, 6:40 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.