如何在AWS Amplify应用中对嵌套查询的子段列表排序?
解决AWS Amplify中嵌套@hasMany关联结果的排序问题
要让嵌套返回的subsegments列表按order字段排序,你需要在关联的SubSegment类型上创建包含外键和排序字段的索引,并更新Segment中的@hasMany注解指向该索引,具体步骤如下:
1. 完善并更新Schema定义
首先确保你的SubSegment类型已正确定义,并且添加包含关联字段和排序字段的全局二级索引:
type SubSegment @model { id: ID! name: String! order: Float! segmentId: ID! # 关联Segment的外键字段 # 创建按segmentId分区、order排序的索引 @index(name: "bySegmentAndOrder", queryField: "subsegmentsBySegmentAndOrder", sortKeyFields: ["order"]) } type Segment @model { id: ID! name: String! order: Float! type: String! @index(name: "byOrder", queryField: "segmentByOrder", sortKeyFields: ["order"]) # 更新@hasMany指向新的索引 subsegments: [SubSegment]! @hasMany(indexName: "bySegmentAndOrder", fields: ["id"]) }
2. 重新部署Amplify API
执行以下命令更新你的API资源:
amplify push
3. 执行查询(支持自定义排序方向)
部署完成后,原查询语句返回的subsegments.items会自动按order字段升序排列。如果需要指定排序方向,你可以在嵌套查询中添加sortDirection参数:
query MyQuery { segmentByOrder(type: "Segment", sortDirection: ASC) { items { id name order subsegments(sortDirection: DESC) { # 显式指定subsegments的排序方向 items { id name order } } } } }
原理说明
- 当你在
SubSegment上创建包含segmentId(分区键)和order(排序键)的索引后,Amplify生成的hasMany关联查询会使用该索引获取关联数据,从而自然实现排序。 - 若未指定
sortDirection,默认会使用索引定义的排序方向(ASC),你也可以在查询时显式指定ASC或DESC。
内容的提问来源于stack exchange,提问作者Vishal Sharma
相关产品推荐
相关产品推荐

