reactjs - 用于计算 DynamoDB 条目的 AppSync 自定义解析程序
问题描述
我有一个 React AppSync 应用程序,其中包含使用 Amplify CLI 预置的 AWS 资源。我需要获取包含数千个条目的表之一中的实体数,而不必自己获取条目。除了获取数千个实体来计算它们的愚蠢之外,我还遇到了一个问题,即我什至无法在一个请求中获取所有这些记录。像这样的简单调用:
import { API, graphqlOperation } from "aws-amplify";
const nodeData = await API.graphql(
graphqlOperation(
`query allNodeIds {
listNodes(limit: 10000) {
items {
id
}
}
}`,
{}
)
);
const nodeCount = nodeData.data.listNodes.items.length;
导致以下控制台错误:
...
errorType: "MappingTemplate"
message: "List size cannot exceed 1000"
似乎我需要编写一个自定义查询和解析器来计算并返回表中的条目数,但不知道从哪里开始编写解析器(在 VTL 中?),将它们放在项目中的哪个位置等。有什么帮助吗?
编辑:根据我的其他生成的解析器之一编写了一个解析器,但它似乎仍被限制为 1001 条记录,尽管我将限制设置为 9999。
架构
...
countResponses(filter: ModelResponseFilterInput, limit: Int, nextToken: String): Int
请求映射模板
#set( $limit = $util.defaultIfNull($context.args.limit, 9999) )
#set( $ListRequest = {
"version": "2017-02-28",
"limit": $limit
} )
#if( $context.args.nextToken )
#set( $ListRequest.nextToken = "$context.args.nextToken" )
#end
#if( $context.args.filter )
#set( $ListRequest.filter = $util.parseJson("$util.transform.toDynamoDBFilterExpression($ctx.args.filter)") )
#end
#if( !$util.isNull($modelQueryExpression)
&& !$util.isNullOrEmpty($modelQueryExpression.expression) )
$util.qr($ListRequest.put("operation", "Query"))
$util.qr($ListRequest.put("query", $modelQueryExpression))
#if( !$util.isNull($ctx.args.sortDirection) && $ctx.args.sortDirection == "DESC" )
#set( $ListRequest.scanIndexForward = false )
#else
#set( $ListRequest.scanIndexForward = true )
#end
#else
$util.qr($ListRequest.put("operation", "Scan"))
#end
$util.toJson($ListRequest)
响应映射模板
## [Start] Determine request authentication mode **
#if( $util.isNullOrEmpty($authMode) && !$util.isNull($ctx.identity) && !$util.isNull($ctx.identity.sub) && !$util.isNull($ctx.identity.issuer) && !$util.isNull($ctx.identity.username) && !$util.isNull($ctx.identity.claims) && !$util.isNull($ctx.identity.sourceIp) && !$util.isNull($ctx.identity.defaultAuthStrategy) )
#set( $authMode = "userPools" )
#end
## [End] Determine request authentication mode **
## [Start] Check authMode and execute owner/group checks **
#if( $authMode == "userPools" )
## No Static Group Authorization Rules **
## [Start] If not static group authorized, filter items **
#if( !$isStaticGroupAuthorized )
#set( $count = 0 )
#foreach( $item in $ctx.result.items )
## No Dynamic Group Authorization Rules **
## [Start] Owner Authorization Checks **
#set( $isLocalOwnerAuthorized = false )
## Authorization rule: { allow: owner, ownerField: "owner", identityClaim: "cognito:username" } **
#set( $allowedOwners0 = $item.owner )
#set( $identityValue = $util.defaultIfNull($ctx.identity.claims.get("username"), $util.defaultIfNull($ctx.identity.claims.get("cognito:username"), "___xamznone____")) )
#if( $util.isList($allowedOwners0) )
#foreach( $allowedOwner in $allowedOwners0 )
#if( $allowedOwner == $identityValue )
#set( $isLocalOwnerAuthorized = true )
#end
#end
#end
#if( $util.isString($allowedOwners0) )
#if( $allowedOwners0 == $identityValue )
#set( $isLocalOwnerAuthorized = true )
#end
#end
## [End] Owner Authorization Checks **
#if( ($isLocalDynamicGroupAuthorized == true || $isLocalOwnerAuthorized == true) )
#set( $count = $count + 1)
#end
#end
#set( $ctx = $count )
#end
## [End] If not static group authorized, filter items **
#end
## [End] Check authMode and execute owner/group checks **
$util.toJson($ctx)
解决方案
推荐阅读
- git - 使用 HEAD 从 git diff 输出中获取添加和删除的文件
- c# - 在 Windows (C#) 中阻止除一个之外的所有网络端口
- genetic-programming - “健身箱”是什么意思?
- python - 为什么逆小波将图像转换为负范围?
- php - 尽管验证成功,谷歌日历未加载从 iCal-URL 导入的事件
- asp.net-core-2.0 - 模型验证不适用于派生类。即使我提到了已知类型
- hl7-fhir - FHIR Vonk 服务器 - 何时使用存储
- python-3.x - 从电生理图获得超极化深度
- c - 在新行上打印每个单词
- java - JavaFx TreeTableCell 的 ComboBox 主体样式