Java AWS DynamoDB如何增加数字

标签 java amazon-web-services amazon-dynamodb dynamodb-queries

我正在尝试将一个数字加 1,然后取回新数字。

我无法正确获取 UpdateItemSpec。请帮忙。每个例子似乎都显示出不同的东西,但它们都不起作用。

这是我的代码:

AmazonDynamoDBClient dbClient = new AmazonDynamoDBClient(
            new BasicAWSCredentials("SECRET", "SECRET")
);
dbClient.setRegion(Region.getRegion(Regions.fromName("us-west-1")));
DynamoDB dynamoDB = new DynamoDB(dbClient);
Table table = dynamoDB.getTable("NumTable");

GetItemSpec spec = new GetItemSpec()
  .withPrimaryKey("PKey","OrderNumber");

Item item = table.getItem(spec);
logger.info(item.toJSONPretty());

UpdateItemSpec updateItemSpec = new UpdateItemSpec()
            .withPrimaryKey("Pkey",
                    "OrderNumber")
            .withReturnValues("UPDATED_NEW")
            .withUpdateExpression("ADD #k :incr")
            .withNameMap(new NameMap().with("#k", "NumVal"))
            .withValueMap(
                    new ValueMap()
                            .withNumber(":incr", 1));
                        //.withString(":incr", "{N:\"1\"}"));
                        //I've tried a million other ways too!


UpdateItemOutcome outcome = table.updateItem(updateItemSpec);
logger.info(outcome.getItem().toJSONPretty());

控制台显示第一个 get 部分正在工作:

Sat Nov 09 00:46:07 UTC - 2019-11-09 00:46:07 f1475303-7585-4804-8a42-2e0a9b16b1dc INFO Commission:88 - {
Sat Nov 09 00:46:07 UTC - "NumVal" : 200000,
Sat Nov 09 00:46:07 UTC - "PKey" : "OrderNumber"
Sat Nov 09 00:46:07 UTC - }

但是更新部分给出了这个错误(以及其他错误):

Sat Nov 09 00:46:08 UTC - The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: 8TPDT2EVMC0G0GF3IFK7SU6777VV4KQNSO5AEMVJF66Q9ASUAAJG): com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: 8TPDT2EVMC0G0GF3IFK7SU6777VV4KQNSO5AEMVJF66Q9ASUAAJG) at [........]

我真的觉得关键元素确实符合架构:'(

这是来 self 的 AWS 控制台的图片:

enter image description here

最佳答案

你的实现对我来说看起来很好。该错误是由于 UpdateItemSpec 代码中的拼写错误造成的。

UpdateItemSpec updateItemSpec = new UpdateItemSpec()
            .withPrimaryKey("Pkey",
                    "OrderNumber")

拼写错误是“Pkey”。它应该是“PKey”,这就是它在 GetItemSpec 代码中工作的原因。

关于Java AWS DynamoDB如何增加数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58775512/

相关文章:

amazon-web-services - AWS Cloudformation dynamodb 表名末尾有字符

.net - .Net 中的 DAX DynamoDB 缓存?

java - Bluecove 关闭连接问题

ios - 我是否需要将AWS S3或EC2用于我的iOS应用程序的后端?

java - 如何确定 DynamoDB 项目是否确实被删除?

node.js - 无服务器 502 网关错误

amazon-web-services - AWS从现有VPC对Cloudformation堆栈进行逆向工程

java - 无法在Android代码中的Alarm OnReceive方法上执行select.php

java - 实例化对象时出现 Appium 错误

java - 编译器无法识别我的变量