Jam*_*111 3 amazon-dynamodb aws-amplify dynamodb-queries
下面我描述了这个问题并给出了背景。这里有人以前遇到过这个问题吗?你是怎么解决的?或者我只是做错了什么?
描述错误
在 AppSync 模型列表上使用基于游标的分页时,它将返回一个items带有 NON NULL 的空数组nextToken,这表示还有更多结果,当我查询下一个结果集时,它会返回与我的查询和过滤器匹配的 3 个结果。我使用的限制为 10,并且只有 3 个结果,我很困惑为什么 AppSync 在我的第一个查询中没有返回这 3 个结果?(它应该返回 3 个结果并且 nextToken 应该为 NULL)
语境:
代码片段/说明
这是列出待处理待办事项的查询,您可以看到限制为 10 个以及可选的 nextToken。这按预期工作,我能够正确对结果进行分页。
query listTodos($nextToken: String) {
listTodos(limit: 10, nextToken: $nextToken, filter: {
status: {
eq: PENDING
}
}) {
nextToken,
items {
id
title
status
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是列出已完成的待办事项的查询,正如您所看到的,限制为 10 和一个可选的 nextToken。这不能正常工作,当我第一次查询待办事项时,它返回一个空的项目数组 + 一个非空的 nextToken ...然后我必须使用给定的 nextToken 运行另一个查询来检索 3 个已完成的待办事项...这一定是一个错误?
query listTodos($nextToken: String) {
listTodos(limit: 10, nextToken: $nextToken, filter: {
status: {
eq: COMPLETED
}
}) {
nextToken,
items {
id
title
status
}
}
}
Run Code Online (Sandbox Code Playgroud)
预期行为
当运行我的 listTodos 查询来获取已完成的待办事项时,它应该在第一个查询中返回 3 个待办事项,我不需要使用返回的 nextToken 运行后续查询来检索仅 3 个已完成的待办事项。
使用过滤器进行分页时,它应该仅返回 3 个与过滤器匹配的结果,并返回 null nextToken。
额外的背景信息
我在 Amplify GitHub 上创建了一个问题:https://github.com/aws-amplify/amplify-js/issues/6997
Set*_*gan 10
在提供限制和过滤表达式时,使用 DynamoDB 进行分页可以提供令人惊讶的结果。它与何时将过滤器和限制应用于您的操作有关。
来自文档:
...假设您查询一个表,限制值为 6,并且没有过滤表达式。查询结果包含表中与请求中的关键条件表达式匹配的前六个项目。
现在假设您向查询添加过滤表达式。在这种情况下,DynamoDB 最多读取六个项目,然后仅返回与过滤器表达式匹配的项目。最终查询结果包含六个或更少的项目,即使如果 DynamoDB 继续读取更多项目,更多项目将与过滤器表达式匹配。
听起来您的第一个查询操作抓取了前 10 个项目,然后应用过滤条件,但没有找到匹配的结果。因此,它不返回任何结果,并提供一个令牌来恢复搜索操作。
对于查询或扫描操作,如果操作未返回表中的所有匹配项目,DynamoDB 可能会返回 LastEvaluatedKey 值。要获取与您的查询匹配的所有项目,请从上一个请求中获取 LastEvaluatedKey 值,并将其用作下一个请求中的 ExclusiveStartKey 值。重复此操作,直到 DynamoDB 不再返回 LastEvaluatedKey 值。
我不熟悉 AppSync,但听起来这就是您遇到的行为。
| 归档时间: |
|
| 查看次数: |
2561 次 |
| 最近记录: |