将Node.js DynamoDB操作转换为AWS CLI命令及计数增量实现
DynamoDB Node.js代码转AWS CLI命令及计数器增量更新指南
一、创建表
AWS CLI命令
aws dynamodb create-table --cli-input-json file://create-table.json --endpoint=http://localhost:8005 --region us-west-2
create-table.json 内容
{ "TableName": "Services", "KeySchema": [ { "AttributeName": "pk", "KeyType": "HASH" }, { "AttributeName": "sk", "KeyType": "RANGE" } ], "AttributeDefinitions": [ { "AttributeName": "pk", "AttributeType": "S" }, { "AttributeName": "sk", "AttributeType": "S" } ], "ProvisionedThroughput": { "ReadCapacityUnits": 10, "WriteCapacityUnits": 10 } }
二、批量插入两行数据
AWS CLI命令
aws dynamodb batch-write-item --cli-input-json file://batch-write.json --endpoint=http://localhost:8005 --region us-west-2
batch-write.json 内容
{ "RequestItems": { "Services": [ { "PutRequest": { "Item": { "pk": { "S": "1" }, "sk": { "S": "1" }, "Service": { "S": "Express" }, "Range1": { "N": "0000000" }, "Range2": { "N": "2000000" }, "Counters": { "N": "0" }, "TriggerUpdate": { "N": "1" } } } }, { "PutRequest": { "Item": { "pk": { "S": "2" }, "sk": { "S": "2" }, "Service": { "S": "Saver" }, "Range1": { "N": "2000001" }, "Range2": { "N": "3999999" }, "Counters": { "N": "0" }, "TriggerUpdate": { "N": "1" } } } } ] } }
三、正确实现Counters字段增量更新
原Node.js代码问题分析
你提供的更新代码存在两处错误:
UpdateExpression中使用的变量名是:value,但ExpressionAttributeValues里定义的是:val,变量名不匹配;:val的值是字符串"1",但Counters是数字类型,应该传入数字而非字符串。
对应的AWS CLI命令(两种方式)
方式一:直接命令行参数
aws dynamodb update-item \ --table-name Services \ --key '{"pk": {"S": "1"}, "sk": {"S": "1"}}' \ --update-expression "ADD Counters :inc" \ --expression-attribute-values '{":inc": {"N": "1"}}' \ --return-values ALL_NEW \ --return-consumed-capacity TOTAL \ --endpoint=http://localhost:8005 \ --region us-west-2
方式二:使用JSON配置文件
创建update-item.json:
{ "TableName": "Services", "Key": { "pk": { "S": "1" }, "sk": { "S": "1" } }, "UpdateExpression": "ADD Counters :inc", "ExpressionAttributeValues": { ":inc": { "N": "1" } }, "ReturnConsumedCapacity": "TOTAL", "ReturnValues": "ALL_NEW" }
执行命令:
aws dynamodb update-item --cli-input-json file://update-item.json --endpoint=http://localhost:8005 --region us-west-2
说明
使用ADD操作符可以安全地对数字类型字段进行增量更新,即使字段不存在也会初始化为指定的增量值。执行上述命令后,Counters字段会从0变为1,再次执行则会继续递增。
内容的提问来源于stack exchange,提问作者KD.S.T.
相关产品推荐
相关产品推荐

