AppSync + DynamoDB:按所有者筛选



我正在尝试为按所有者过滤的扫描编写解析器模板。

这是我

到目前为止尝试的(这是我的请求模板(:

#set( $identityValue = $util.defaultIfNull($ctx.identity.claims.get("username"),
$util.defaultIfNull($ctx.identity.claims.get("cognito:username"), "___xamznone____")) )
#set( $ScanRequest = {
"version": "2017-02-28",
  "operation": "Scan",
  "filter": {
    "expression": "owner = :owner",
    "expressionValues": {
      ":owner": { "S": $identityValue }
    }
  }
} )
$util.toJson($ScanRequest)

此模板失败,因为owner是保留关键字。但是,我不知道如何使用AppSync处理保留字。

如何使用 AppSync 处理保留字?有没有比我的硬编码扫描更好的方法来编写此扫描?

所以我

在硬编码时解决了它:

#set( $identityValue = $util.defaultIfNull($ctx.identity.claims.get("username"),
$util.defaultIfNull($ctx.identity.claims.get("cognito:username"), "___xamznone____")) )
#set( $ScanRequest = {
"version": "2017-02-28",
  "operation": "Scan",
  "filter": {
    "expression": "#owner = :owner",
    "expressionValues": {
      ":owner": { "S": $identityValue }
    },
    "expressionNames": {
      "#owner": "owner"
    }
  }
} )
$util.toJson($ScanRequest)

如果有人可以想出一个非硬编码的答案,例如像这样动态设置过滤器:

#if( $context.args.filter )
  #set( $ListRequest.filter = $util.parseJson("$util.transform.toDynamoDBFilterExpression($ctx.args.filter)") )
#end

虽然仍然按所有者过滤,但我很乐意接受这个答案。

#set($ctx.args.filter.sub = { "eq" : $context.identity.claims.sub })
##if( $context.args.filter )
  #set( $ListRequest.filter = $util.parseJson("$util.transform.toDynamoDBFilterExpression($ctx.args.filter)") )
##end

你应该使用"expressionNames"来解决保留的关键字。过滤器表达式将如下所示:

"filter": {
  "expression": "#owner = :owner",
  "expressionNames": {
    "#owner": "owner"
  },
  "expressionValues": {
    ":owner": { "S": $identityValue }
  }
}

最新更新