4

我尝试在创建一些帖子时自动添加时间戳。但它不适用于 appsync resolver-context-reference 的示例。

https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html#time-helpers-in-util-time

{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "id" : $util.dynamodb.toDynamoDBJson($util.autoId())
    },

    #set( $myfoo = $util.dynamodb.toMapValues($ctx.args) )
    #set( $myFoo.version = $util.dynamodb.toNumber(1) )
    #set( $myFoo.timestamp = $util.time.nowISO8601() )

    "attributeValues" : $util.toJson($myFoo)
}
4

3 回答 3

6

这是您要执行的操作的一个工作示例(取自我的 AppSync API 解析器)。注意“messageId”和“createdDate”属性。这就是在写入 DDB 时添加日期的方法。

{
  "version": "2017-02-28",
  "operation": "PutItem",
  "key": {
    "eventId": $util.dynamodb.toDynamoDBJson($ctx.args.input.eventId),
    "messageId": $util.dynamodb.toDynamoDBJson("$util.time.nowISO8601()$util.autoId()"),
  },
  "attributeValues": {
    "message": $util.dynamodb.toDynamoDBJson($ctx.args.input.message),
    "createdDate": $util.dynamodb.toDynamoDBJson($util.time.nowISO8601())
  }
}
于 2018-05-08T01:51:57.793 回答
4

将您的解析器更改为以下内容

{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "id" : $util.dynamodb.toDynamoDBJson($util.autoId())
    },

    #set( $myFoo = $util.dynamodb.toMapValues($ctx.args) )
    #set( $myFoo.version = $util.dynamodb.toNumber(1) )
    #set( $myFoo.timestamp = $util.dynamodb.toDynamoDB($util.time.nowISO8601()) )

    "attributeValues" : $util.toJson($myFoo)
}

另请注意,对的调用$util.time.nowISO8601()现在包含$util.dynamodb.toDynamoDB()

于 2018-05-09T02:15:43.543 回答
1

对于 dynamoDB,String应该通过$util. 因此,将时间字符串更改为 dynamoDB 类型后将起作用。

#set( $myFoo.timestamp = $util.time.nowISO8601() )
=>  
#set( $myFoo.timestamp = $util.dynamodb.toDynamoDB($util.time.nowISO8601())
于 2018-05-04T04:28:17.137 回答