问题描述
我正在学习编码,现在我正处于一个使用 Sanity 作为 CMS 的小型宠物项目的阶段。 长话短说,制作一个 API 我试图通过对鸡尾酒的投票来获取鸡尾酒数据。选票存储在投票的人中:
GROQ 查询
*[
_type == "cocktail" &&
!(_id in path('drafts.**'))
] {
name,_id,"Votes" : *[_type == "person" && references(^._id)] {
Votes[] {
score,"id": cocktail._ref
}
}
}
哪个返回
[
{
"_id": "pdUGiuRzgLGpnc4cfx76nA","name": "Cuba Libre","Votes": [
{
"Votes": {
"id": "pdUGiuRzgLGpnc4cfx76nA","score": 2
}
},{
"Votes": {
"id": "pdUGiuRzgLGpnc4cfx76nA","score": 2
}
}
]
},{
"_id": "pdUGiuRzgLGpnc4cfxBOyM","name": "The ERSH7","Votes": []
}
]
如您所见,合并提供了嵌入的投票数组,同时我想要……
[{
...cocktail attributes...
"Votes" : [
{score: 2,id: pdUGiuRzgLGpnc4cfx76nA},{score: 2,id: pdUGiuRzgLGpnc4cfx76nA}
]
}
... more cocktails....
]
*[
_type == "cocktail" &&
!(_id in path('drafts.**'))
] {
name,"Votes" : *[_type == "person" && references(^._id)].Votes[] {
score,"id": cocktail._ref
}
}
应该从投票 arr 的每个元素中进行投影。不幸的是我得到了空数组:
[
{
"_id": "pdUGiuRzgLGpnc4cfx76nA","Votes": [
{},{}
]
}
...more cocktails
]
我怎样才能达到预期的效果? 感谢您的阅读!非常感谢您的帮助!
解决方法
是的,在“压平”我自己的投影方面也有类似的挣扎。我用 dot-syntax 解决了这个问题。尝试在第一次尝试时添加 .votes
:
*[
_type == "cocktail" &&
!(_id in path('drafts.**'))
]
{
name,_id,"votes" : *[_type == "person" && references(^._id)] {
votes[] {
score,"id": cocktail._ref
}
}
.votes
}
如果这是正确的,可以简化整个查询,但我还没有达到这样的水平,我可以在不针对类似集合进行测试的情况下做到这一点,'-)