我有以下 golang 代码,我认为它可能能够更新 dynamodb 表中名为“status”的字段。
它能够更新属性“状态”,但它也删除了其他现有属性的值。
import (
"bufio"
"context"
"fmt"
"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"
dynamodbTypes "github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
log "github.com/sirupsen/logrus"
"os"
"time"
)
func UpdateStatusToProcessed(basePath string, region string) {
input := &dynamodb.UpdateItemInput{
TableName: aws.String("aws-analytics-archive"),
Key: map[string]dynamodbTypes.AttributeValue{
"base_path": &dynamodbTypes.AttributeValueMemberS{
Value: basePath,
},
},
UpdateExpression: aws.String("set #status = :status"),
ExpressionAttributeValues: map[string]dynamodbTypes.AttributeValue{
":status": &dynamodbTypes.AttributeValueMemberS{
Value: "serialized-to-db",
},
},
ExpressionAttributeNames: map[string]string{
"#status": "status",
},
}
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion(region))
if err != nil {
log.Panic("Unable to create config for dynamodb client : ", err)
}
client := dynamodb.NewFromConfig(cfg)
_, err = client.UpdateItem(context.Background(), input)
if err != nil {
log.Error("Unable to update : ", err)
}
}
我不知道哪部分代码是错误的。我的目标是更新属性“status”而不修改其他属性。
状态是否偶然成为表的哈希键或排序键?
您无法更新密钥,DDB 将使用新密钥添加新项目,并且使用旧密钥的旧项目仍然存在。