You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 11:10:04