在AWS SDK GO V2 DynamoDB迁移时,如果之前的ADD操作不能再生效,可以通过以下方式进行修改。
在V1版本中,ADD操作可以直接用UpdateItem方法进行实现:
_, err = db.UpdateItem(&dynamodb.UpdateItemInput{
TableName: aws.String(tableName),
Key: map[string]*dynamodb.AttributeValue{
"id": {
S: aws.String("1"),
},
},
ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{
":val": {
N: aws.String("1"),
},
},
UpdateExpression: aws.String("ADD myField :val"),
})
在V2版本中,需要修改UpdateItemInput中的ExpressionAttributeNames和ExpressionAttributeValues参数来替代ADD操作:
_, err = db.UpdateItem(context.TODO(), &ddb.UpdateItemInput{
TableName: aws.String(tableName),
Key: map[string]ddb.AttributeValue{
"id": {
S: aws.String("1"),
},
},
UpdateExpression: aws.String("set myField = if_not_exists(myField, :init) + :incr"),
ExpressionAttributeNames: map[string]string{
"#F": "myField",
},
ExpressionAttributeValues: map[string]ddb.AttributeValue{
":init": {
N: aws.String("0"),
},
":incr": {
N: aws.String("1"),
},
},
})
这里采用了if_not_exists函数来确保能够正确处理初始值的情况,也可以根据需要更改该函数的逻辑。