Amplify GraphQL按CreatedAt排序分页无法获取最新数据的问题咨询
问题描述
我定义了如下的Report @model,想要按CreatedAt日期获取最新记录。Report表中有15条记录:
- 请求全部15条并按ASC排序时,能正确按「最新→最早」顺序返回;
- 但限制每次获取5条时,排序顺序正确,却返回最早的5条而非最新的5条。
Report模型定义
type Report @model @auth(rules: [ { allow: owner, operations: [create, read] }, { allow: private, operations: [read] } ]) { id: ID! author: String! @index(name: "byAuthor", queryField: "reportByAuthor", sortKeyFields: ["createdAt"]) submissionID: ID! @index(name: "bySubmissionID", queryField: "reportBySubmissionID") submission: Submission @hasOne(fields: ["submissionID"]) result: String! createdAt: String! type: String! @index(name: "reportByDate", queryField: "reportByDate", sortKeyFields: ["createdAt"]) customComment: String }
当前请求代码(按ASC排序、每次取5条)
const result = await API.graphql({ query: reportByDate, variables: { type: SubmitType.REPORT, sortDirection: 'ASC', limit: 5, nextToken: nxtToken } });
解决方案
问题核心是排序方向与分页逻辑不匹配:
- 用
ASC排序时,DynamoDB默认从最早的记录开始返回,全量获取后看起来是最新→最早,大概率是前端自行做了倒序处理; - 要直接获取最新的5条记录,需将排序方向改为
DESC,这样DynamoDB会从最新的记录开始返回,配合limit:5就能拿到目标数据。
修正后的请求代码:
const result = await API.graphql({ query: reportByDate, variables: { type: SubmitType.REPORT, sortDirection: 'DESC', limit: 5, nextToken: nxtToken } });
若需分页获取更早的记录,直接使用返回的nextToken即可,DESC排序下的分页会按从新到旧的顺序依次返回数据。
内容的提问来源于stack exchange,提问作者johnDoe
相关产品推荐
相关产品推荐

