Amazon dynamodb 如何设置新项目';s属性为(从所有项中的最大值加n)?

Amazon dynamodb 如何设置新项目';s属性为(从所有项中的最大值加n)?,amazon-dynamodb,aws-appsync,vtl,Amazon Dynamodb,Aws Appsync,Vtl,我想要下面的表结构,以存储行的pid*属性的自动增量 | id | timstamp | pid* | 00000000-1111-2222-93bb-0371fcb45674 | 0 | 1 | 00000000-1111-2222-93bb-ee742a825e88 | 1 | 2 | 0000000

我想要下面的表结构,以存储行的pid*属性的自动增量

          | id                                   | timstamp    | pid*
          | 00000000-1111-2222-93bb-0371fcb45674 | 0           | 1
          | 00000000-1111-2222-93bb-ee742a825e88 | 1           | 2
          | 00000000-1111-2222-93bb-bfac8753c0ba | 2           | 3
PutItem ->  autoId()                             | timestamp() | max(pid) + 1 = 4 ??
对于PutItem操作,在DynamoDB land中是否有以下情况1)可能,2)可接受

"pid" : $util.dynamodb.toDynamoDBJson(records.findMax(pid) + 1) # just pseudo code
3) 如何使用DyanmoDB解析器映射器模板实现上述功能

用例:

我试图使用AWS DynamoDB来支持由AWS AppSync管理的GraphQL,下面是Mutation.createFoo的请求映射模板

{
    "version" : "2018-05-29",
    "operation" : "PutItem",
    "key" : {
        "id": $util.dynamodb.toDynamoDBJson($util.autoId()),
    },
    "attributeValues" : {
        "timestamp" :  $util.dynamodb.toDynamoDBJson($util.time.nowEpochMilliSeconds()),
        "pid" :  $util.dynamodb.toDynamoDBJson($ctx.args.input.pid), # currently client provided but it is not acceptable
        ...
    }
}
主键id是DynamoDB自动生成的UUID,这很好。但是我们的用例要求我们的FooTable中的每个新Foo都有一个递增的pid。业务模型要求至少显示一个唯一的pid,而在引擎盖下,将使用诸如GetItem TheUUIDtimestamp之类的查询,并照常工作

我也厌倦了因为实现细节问题而要求改变商业模式

参考资料:


在这些主题中有一些很好的讨论:-通常,这不是一个好主意,但请参阅这些问题的回答,了解如何实现。多个问题:您是否需要严格按1自动递增?pid值是否存在漏洞,例如1、2、3、8?删除项目时会发生什么情况?是否需要调整
pid
值以避免出现“孔”?或者,如果允许孔,它是否只是一个唯一的数值?你打算在那里储存多少物品?我想这些问题中有很多可以归结为“应用程序是如何使用pid的?”