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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:05:20