在 Go(AWS SDK v2)中使用 DynamoDB UpdateItem

UpdateItem 改動單一項目的特定屬性(若項目不存在則建立),其餘一切保持不動。在 AWS SDK for Go v2 中,你以 dynamodb.UpdateItemInput 上的 UpdateExpression 呼叫 client.UpdateItem

Code

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/dynamodb"
	"github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
)

func main() {
	ctx := context.TODO()
	cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion("us-east-1"))
	if err != nil {
		log.Fatalf("load config: %v", err)
	}
	client := dynamodb.NewFromConfig(cfg)

	out, err := client.UpdateItem(ctx, &dynamodb.UpdateItemInput{
		TableName: aws.String("Music"),
		Key: map[string]types.AttributeValue{
			"Artist":    &types.AttributeValueMemberS{Value: "Arturo Sandoval"},
			"SongTitle": &types.AttributeValueMemberS{Value: "Cubano Chant"},
		},
		UpdateExpression: aws.String("SET #upd0 = :updValue0, #upd1 = :updValue1 ADD #upd2 :updValue2"),
		ExpressionAttributeNames: map[string]string{
			"#upd0": "Genre",
			"#upd1": "Year",
			"#upd2": "Awards",
		},
		ExpressionAttributeValues: map[string]types.AttributeValue{
			":updValue0": &types.AttributeValueMemberS{Value: "Latin Jazz"},
			":updValue1": &types.AttributeValueMemberN{Value: "1994"},
			":updValue2": &types.AttributeValueMemberN{Value: "1"},
		},
		ReturnValues: types.ReturnValueAllNew,
	})
	if err != nil {
		log.Fatalf("update item: %v", err)
	}
	fmt.Println(out.Attributes) // the item after the update
}

說明

  • Key — 要更新之項目的完整 primary key。
  • UpdateExpression — 一或多個子句:
    • SET 指派屬性(#upd0 = :updValue0 設定 Genre#upd1 = :updValue1 設定 Year)。每個屬性都透過 ExpressionAttributeNames 以別名表示,因此像 Year 這樣的保留字永遠安全。
    • ADD 對數字執行 atomic 遞增(ADD #upd2 :updValue2Awards 加 1)— 在並行下安全,沒有 read-modify-write 競爭。REMOVE 刪除一個屬性;DELETE 從 set 移除元素。
  • ExpressionAttributeValues:placeholder → 帶型別值的 map(AttributeValueMemberS/...MemberN)。
  • ReturnValues: types.ReturnValueAllNew — 在 out.Attributes 回傳更新後的完整項目(另有 ReturnValueUpdatedNewReturnValueAllOldReturnValueUpdatedOldReturnValueNone)。
  • Upsert 語意 — 若 key 不存在,UpdateItem 會建立該項目。加上 ConditionExpression(例如 attribute_exists(Artist))可改為只更新。
  • 偏好在程式碼中建立運算式?expression 套件github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression)會為你組合 SET/ADD 子句並產生 name/value map。

改用視覺化操作

DynamoDB Expression Builder 會以 name/value map 建立 SET / ADD / REMOVE 子句並複製可執行的程式碼。

想在 GUI 中編輯項目 — 改動欄位、審視產生的 UpdateExpression、複製程式碼 — 下載 DynoTable

相關範例

References

最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。

不必透過主控台就能操作 DynamoDB

DynoTable 是一款快速的 DynamoDB 桌面用戶端 — 瀏覽表格、執行 SQL 風格的查詢,並在本機編輯項目。