in DynamoDB-SDK-Examples/golang/WorkingWithItems/updateItemConditional.go [25:76]
func main() {
// Create Session
sess, err := session.NewSession(&aws.Config{
Region: aws.String("eu-west-1")},
)
// Create DynamoDB client
svc := dynamodb.New(sess)
// Attribute to update
address := Address{
Road: "8123 Updated Rd, Main St, Hereville",
Country: "USA",
}
// Keys for item
item := Item{
Pk: "jose.schneller@somewhere.com",
Sk: "metadata",
}
// Marshal
expr, err := dynamodbattribute.MarshalMap(address)
if err != nil {
log.Fatalf("Got error marshalling item: %s", err)
}
key, err := dynamodbattribute.MarshalMap(item)
if err != nil {
log.Fatalf("Got error marshalling item: %s", err)
}
// Update Road Only if Country = USA
input := &dynamodb.UpdateItemInput{
TableName: aws.String("RetailDatabase"),
Key: key,
UpdateExpression: aws.String("set address.road = :r"),
ExpressionAttributeValues: expr,
ReturnValues: aws.String("UPDATED_NEW"),
ConditionExpression: aws.String("address.country = :c"),
}
// Update item
_, err = svc.UpdateItem(input)
if err != nil {
log.Fatalf("Got error calling UpdateItem: %s", err)
}
fmt.Println("Successfully updated item")
}