Amazon dynamodb 如何只更新JSON的一部分?
我有一张DynamoDB桌子:Amazon dynamodb 如何只更新JSON的一部分?,amazon-dynamodb,Amazon Dynamodb,我有一张DynamoDB桌子: +--------------------------------------------------+ | Customer ID (Primary Key)|Gamestats (JSON entry) | +--------------------------------------------------+ JSON: 我只想更新JSON的一部分。最好的方法是什么?例如,将QuickShootingMode更新为false 一种方法是调用并获取JSON,
+--------------------------------------------------+
| Customer ID (Primary Key)|Gamestats (JSON entry) |
+--------------------------------------------------+
JSON:
我只想更新JSON的一部分。最好的方法是什么?例如,将QuickShootingMode
更新为false
一种方法是调用并获取JSON,然后迭代JSON并更新值,然后将新的JSON放回dynamo DB。这意味着它将拨打2个电话A) 获取数据和
B) 将数据放入数据库 有没有更好的方法可以让我直接更新数据,避免打这些额外的网络电话?我可以将JSON中的每个键转换为dynamo BD中的一列,但是如果键的数量增加,那么我最终将拥有大量的列(这可能是一个糟糕的设计),因此我认为将JSON保存在一列
游戏统计数据中会更有意义
Map<String, AttributeValue> key = new HashMap<>();
AmazonDynamoDB dynamoDB = dynamoDBClient.getDynamoDB();
key.put(USER_ID_KEY, new AttributeValue().withS("xyz"));
key.put("Gamedata", new AttributeValue().withS("some JSON"));
PutItemRequest request = new PutItemRequest()
.withTableName(table)
.withItem(key);
PutItemResult result = dynamoDB.putItem(request);
Map key=newhashmap();
AmazonDynamoDB dynamoDB=dynamoDBClient.getDynamoDB();
key.put(USER_ID_key,new AttributeValue(),带有(“xyz”);
key.put(“Gamedata”,新的AttributeValue().with(“一些JSON”);
PutItemRequest=新的PutItemRequest()
.withTableName(表)
.带项目(键);
PutItemResult=dynamoDB.putItem(请求);
有没有更好的方法来实现我的目标?从您的问题来看,您正在存储字符串化JSON。如果是这样的话,update
对您没有帮助,但据我所知,存储字符串化的JSON而不是使用dynamodb映射和列表是没有价值的
可以使用在地图或列表中设置嵌套属性。使用地图而不是gamestats属性的列表更好,因为这样您就不必担心属性的顺序
以Gamestats为地图的Javascript示例
dynamodb.update({
TableName:table,
钥匙:钥匙,
UpdateExpression:'SET#gs.#qs.#status=:newStatus',
expressionAttribute名称:{'#gs':'Gamestats','#qs':'QuickShootingMode','#status':'status'},
表达式属性值:{:newStatus':false}
},回调)
使用更新api。这会更新JSON的一部分吗@水泥砌块
Map<String, AttributeValue> key = new HashMap<>();
AmazonDynamoDB dynamoDB = dynamoDBClient.getDynamoDB();
key.put(USER_ID_KEY, new AttributeValue().withS("xyz"));
key.put("Gamedata", new AttributeValue().withS("some JSON"));
PutItemRequest request = new PutItemRequest()
.withTableName(table)
.withItem(key);
PutItemResult result = dynamoDB.putItem(request);