查询多对多关联时,如何返回扁平字符串数组而非对象数组?
问题:如何让EdgeDB查询返回数组形式的关联属性值
给定以下EdgeDB数据模型:
type default::Genre { required property name -> std::str { constraint std::exclusive; }; }; type default::Movie { required property title -> std::str; property year -> std::int64; multi link genres -> default::Genre; };
执行查询:
select Movie { title, year, genres: {name} } limit 1
得到结果:
[ { "title": "Troja", "year": 2004, "genres": [ { "name": "Action" }, { "name": "War" }, { "name": "Adventure" }, { "name": "History" } ] } ]
希望修改查询语句,得到如下格式的结果:
[ { "title": "Troja", "year": 2004, "genres": [ "Action", "War", "Adventure", "History" ] } ]
解决方案
可以使用EdgeDB的array()函数配合路径表达式直接提取关联对象的属性值,修改后的查询如下:
select Movie { title, year, genres := array(.genres.name) } limit 1
说明
.genres.name是路径表达式,会遍历当前Movie对象关联的所有Genre实例,直接提取它们的name属性值array()函数将这些零散的属性值打包成一个字符串数组,最终返回你需要的格式
如果需要查阅文档,可搜索关键词:array函数、路径表达式
内容的提问来源于stack exchange,提问作者HWM-Rocker
相关产品推荐
相关产品推荐

