Amazon dynamodb AppSync分页问题,其中未返回任何项目,但未返回下一个项目
下面我已经描述了这个问题并给出了上下文。这里有人有过这个问题吗?你是怎么解决的?还是我只是做错了什么 描述错误 在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应该为空) 背景: 我有一个屏幕选项卡视图,第一
items
数组,其中包含一个非空的nextToken
,这表示有更多结果,当我查询下一个结果集时,它将返回与我的查询和筛选匹配的3个结果。我使用的限制是10&只有3个结果,我不明白为什么AppSync在我的第一个查询中不返回这3个结果?(它应该返回3个结果&nextToken应该为空)
背景:
- 我有一个屏幕选项卡视图,第一个选项卡显示挂起的待办事项,第二个选项卡显示完成的待办事项
- 我有3个结果与我完成的筛选匹配
- 我有大约36个结果与我的待定过滤器匹配
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,但听起来这就是您正在经历的行为