Sanity.io GROQ 查询对象数组

问题描述

我正在学习编码,现在我正处于一个使用 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
}

如果这是正确的,可以简化整个查询,但我还没有达到这样的水平,我可以在不针对类似集合进行测试的情况下做到这一点,'-)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...