首页 > 解决方案 > 使用 Go 更新 DynamoDB 中的多个值

问题描述

我正在尝试更新 DynamoDb 表中的 value1 和 value2 项目属性,但UpdateExpression只设置一个参数 (value1)。尝试同时包含 value1 和 value2 ( aws.String("set value1= :r, set value2= :c")) 会导致:

Got error calling UpdateItem: %s
ValidationException: Invalid UpdateExpression: Syntax error; token: "set", near: ", set 
HashValue" status code: 400, request id:******

如何更新数据库项目中的多个字段?

--

func UpdateObject(obj MyObject) (string, error) {

sess := session.Must(session.NewSessionWithOptions(session.Options{
    SharedConfigState: session.SharedConfigEnable,
}))

// Create DynamoDB client
svc := dynamodb.New(sess)

// Update item in table Movies
tableName := "MyTable"

input := &dynamodb.UpdateItemInput{
    ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{
        ":r": {
            N: aws.String(strconv.Itoa(obj.value1)),
        },
        ":c": {
            S: aws.String(obj.value2),
        },
    },
    TableName: aws.String(tableName),
    Key: map[string]*dynamodb.AttributeValue{
        "ThreatID": {
            N: aws.String(strconv.Itoa(obj.value3)),
        },
        "ThreatName": {
            S: aws.String(obj.value4),
        },
    },
    ReturnValues:     aws.String("UPDATED_NEW"),
    UpdateExpression: aws.String("set value1= :r"),
}

 //........

}

--

 type MyObject struct {
     value3 int
     value4 string
     value2 string
     value1 int
   }

标签: goamazon-dynamodb

解决方案


使用此语法:

aws.String("set value1= :r, value2= :c")

参考: https ://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html


推荐阅读