哪些情况会导致 AppSync 无法从 DynamoDB 表中返回所有匹配的记录/项目?
Posted
技术标签:
【中文标题】哪些情况会导致 AppSync 无法从 DynamoDB 表中返回所有匹配的记录/项目?【英文标题】:What cases will cause AppSync to not return all matching records/items from the DynamoDB table? 【发布时间】:2019-10-26 01:44:51 【问题描述】:我们看到了一些奇怪的行为,其中并非所有项目都在 AppSync 查询中返回。数据库表有 31 项,但下面的查询只返回 10 项?
query listAllDocuments
listDocuments
items
userId
这是一个简单的 DynamoDB 解析器:
"version" : "2017-02-28",
"operation" : "Scan",
"filter": #if($ctx.args.filter) $util.transform.toDynamoDBFilterExpression($ctx.args.filter) #else null #end,
其他查询(使用过滤器)也返回一些实际匹配文档的子集。
【问题讨论】:
【参考方案1】:不确定您是否粘贴了所有解析器代码。如果您使用自动生成的 listX
解析器,它默认返回 10 个项目。试试
query listAllDocuments
listDocuments(limit: 100) // anything larger than 31
items
userId
您将获得全部 31 个。在github thread 中查找更多详细信息
【讨论】:
这就是所有的解析器代码 - 没有限制。【参考方案2】:使用扫描时默认限制为 10,以防止您的表格变褐。在您的 VTL 映射模板中,指定更高的限制以获取所有项目。请参阅 https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-scan 以指定此限制。您可以将限制设置为任意高;一旦达到表中的项目总数或限制,以较小者为准,DynamoDB 将停止。
【讨论】:
以上是关于哪些情况会导致 AppSync 无法从 DynamoDB 表中返回所有匹配的记录/项目?的主要内容,如果未能解决你的问题,请参考以下文章
无法从 Lambda 调用 AppSync GraphQL api:TypeError:无法读取 null 的属性“匹配”