Amazon dynamodb AppSync分页问题,其中未返回任何项目,但未返回下一个项目

Amazon dynamodb AppSync分页问题,其中未返回任何项目,但未返回下一个项目,amazon-dynamodb,aws-amplify,dynamodb-queries,Amazon Dynamodb,Aws Amplify,Dynamodb Queries,下面我已经描述了这个问题并给出了上下文。这里有人有过这个问题吗?你是怎么解决的?还是我只是做错了什么 描述错误 在AppSync模型列表上使用基于光标的分页时,它将返回一个空的items数组,其中包含一个非空的nextToken,这表示有更多结果,当我查询下一个结果集时,它将返回与我的查询和筛选匹配的3个结果。我使用的限制是10&只有3个结果,我不明白为什么AppSync在我的第一个查询中不返回这3个结果?(它应该返回3个结果&nextToken应该为空) 背景: 我有一个屏幕选项卡视图,第一

下面我已经描述了这个问题并给出了上下文。这里有人有过这个问题吗?你是怎么解决的?还是我只是做错了什么

描述错误

在AppSync模型列表上使用基于光标的分页时,它将返回一个空的
items
数组,其中包含一个非空的
nextToken
,这表示有更多结果,当我查询下一个结果集时,它将返回与我的查询和筛选匹配的3个结果。我使用的限制是10&只有3个结果,我不明白为什么AppSync在我的第一个查询中不返回这3个结果?(它应该返回3个结果&nextToken应该为空)

背景:

  • 我有一个屏幕选项卡视图,第一个选项卡显示挂起的待办事项,第二个选项卡显示完成的待办事项
  • 我有3个结果与我完成的筛选匹配
  • 我有大约36个结果与我的待定过滤器匹配
代码片段/解释

这是一个用于列出未决TODO的查询,正如您可以看到的,有10个限制&可选的nextToken。这项工作正如预期的那样,我能够正确地对结果进行分页

query listTodos($nextToken: String) {
  listTodos(limit: 10, nextToken: $nextToken, filter: {
    status: {
      eq: PENDING
    }
  }) {
    nextToken,
    items {
      id
      title
      status
    }
  }
}
这是用于列出已完成TODO的查询,正如您可以看到的,限制为10&可选的nextToken。当我第一次查询TODO时,这不正确,它返回一个空的items数组+一个非空的nextToken…然后我必须用给定的nextToken运行另一个查询来检索3个完成的TODO…这一定是个bug

query listTodos($nextToken: String) {
  listTodos(limit: 10, nextToken: $nextToken, filter: {
    status: {
      eq: COMPLETED
    }
  }) {
    nextToken,
    items {
      id
      title
      status
    }
  }
}
预期行为

当为已完成的TODO运行我的listTodos查询时,它应该在第一个查询中返回3个TODO,我不需要使用返回的nextToken运行后续查询来检索仅3个已完成的TODO

当使用筛选器进行分页时,它应该只返回3个与筛选器匹配的结果,并返回null nextToken

附加上下文

  • 你们还需要其他上下文来帮助调试吗?让我知道

我在Amplify GitHub上创建了一个问题:

在提供限制和过滤器表达式时,使用DynamoDB分页可以提供令人惊讶的结果。它与过滤器和限制何时应用于您的操作有关

发件人:

。。。假设您查询了一个限制值为6的表,但没有 过滤器表达式。查询结果包含前六项 从与 请求

现在假设您向查询中添加了一个过滤器表达式。在这个 在这种情况下,DynamoDB最多读取六项,然后只返回那些 匹配筛选器表达式。最终的查询结果包含六项 或更少,即使有更多项与筛选器表达式匹配 如果DynamoDB继续阅读更多的项目

听起来您的第一个查询操作获取了前10项,然后应用筛选条件,没有找到匹配的结果。因此,它不返回任何结果,并提供一个令牌来恢复搜索操作

对于查询或扫描操作,如果操作未返回表中的所有匹配项,DynamoDB可能会返回LastEvaluatedKey值。要获取与查询匹配的所有项,请从上一个请求获取LastEvaluatedKey值,并在下一个请求中将其用作ExclusiveStartKey值。重复此操作,直到DynamoDB不再返回LastEvaluatedKey值

我不熟悉AppSync,但听起来这就是您正在经历的行为