Go'da DynamoDB UpdateItem (AWS SDK v2)

UpdateItem, bir öğenin belirli özniteliklerini değiştirir (ve öğe yoksa onu oluşturur), geri kalan her şeye dokunmadan bırakır. Go v2 için AWS SDK'da bir dynamodb.UpdateItemInput üzerinde bir UpdateExpression ile client.UpdateItem'i çağırırsınız.

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
}

Açıklama

  • Key — güncellenecek öğenin tam birincil anahtarı.
  • UpdateExpression — bir veya daha fazla yan tümce:
    • SET öznitelikleri atar (#upd0 = :updValue0, Genre'yi ayarlar; #upd1 = :updValue1, Year'ı ayarlar). Her öznitelik ExpressionAttributeNames aracılığıyla bir takma ad alır, böylece Year gibi ayrılmış sözcükler her zaman güvenlidir.
    • Bir sayı üzerinde ADD, atomik bir artış yapar (ADD #upd2 :updValue2, Awards'a 1 ekler) — eşzamanlılık altında güvenli, oku-değiştir-yaz yarışı yok. REMOVE bir özniteliği siler; DELETE bir kümeden öğeleri kaldırır.
  • ExpressionAttributeValues:placeholder → türlü-değer eşlemesi (AttributeValueMemberS/...MemberN).
  • ReturnValues: types.ReturnValueAllNew — güncellemeden sonra öğenin tamamını out.Attributes içinde döndürür (ayrıca ReturnValueUpdatedNew, ReturnValueAllOld, ReturnValueUpdatedOld veya ReturnValueNone).
  • Upsert anlamları — anahtar yoksa UpdateItem öğeyi oluşturur. Yalnızca-güncelleme için bir ConditionExpression (örneğin attribute_exists(Artist)) ekleyin.
  • İfadeleri kodda oluşturmayı mı tercih edersiniz? expression paketi (github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression), SET/ADD yan tümcelerini bir araya getirir ve ad/değer eşlemelerini sizin için üretir.

Görsel olarak yapın

DynamoDB Expression Builder, SET / ADD / REMOVE yan tümcelerini ad/değer eşlemeleriyle oluşturur ve çalıştırılabilir kodu kopyalar.

Öğeleri bir grafik arayüzde (GUI) düzenlemek için — bir alanı değiştirin, üretilen UpdateExpression'ı gözden geçirin, kodu kopyalayın — DynoTable'ı indirin.

İlgili örnekler

References

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.