UpdateItem DynamoDB en Go (AWS SDK v2)

UpdateItem modifie des attributs spécifiques d'un élément (et crée l'élément s'il n'existe pas), en laissant tout le reste intact. Dans AWS SDK pour Go v2, tu appelles client.UpdateItem avec une UpdateExpression sur un dynamodb.UpdateItemInput.

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
}

Explication

  • Key — la clé primaire complète de l'élément à mettre à jour.
  • UpdateExpression — une ou plusieurs clauses :
    • SET assigne des attributs (#upd0 = :updValue0 fixe Genre ; #upd1 = :updValue1 fixe Year). Chaque attribut est aliasé via ExpressionAttributeNames, donc les mots réservés comme Year sont toujours à l'abri.
    • ADD sur un nombre fait un incrément atomique (ADD #upd2 :updValue2 ajoute 1 à Awards) — sûr en concurrence, sans course lecture-modification-écriture. REMOVE supprime un attribut ; DELETE retire des éléments d'un ensemble.
  • ExpressionAttributeValues — la map :placeholder → valeur typée (AttributeValueMemberS/...MemberN).
  • ReturnValues: types.ReturnValueAllNew — renvoie l'élément complet après la mise à jour dans out.Attributes (aussi ReturnValueUpdatedNew, ReturnValueAllOld, ReturnValueUpdatedOld ou ReturnValueNone).
  • Sémantique d'upsertUpdateItem crée l'élément si la clé n'existe pas. Ajoute une ConditionExpression (par ex. attribute_exists(Artist)) pour une mise à jour seulement.
  • Tu préfères construire les expressions dans le code ? Le package expression (github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression) compose les clauses SET/ADD et génère les maps de noms/valeurs à ta place.

À faire visuellement

Le DynamoDB Expression Builder construit les clauses SET / ADD / REMOVE avec les maps de noms/valeurs et copie du code exécutable.

Pour éditer des éléments dans une interface graphique — changer un champ, examiner l'UpdateExpression générée, copier le code — télécharge DynoTable.

Exemples liés

References

Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.

Travaille avec DynamoDB sans la Console

DynoTable est un client de bureau rapide pour DynamoDB — parcours les tables, exécute des requêtes de style SQL et édite les items en local.