DynamoDB UpdateItem() 删除其他属性

问题描述 投票:0回答:1

我有以下 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”而不修改其他属性。

go amazon-dynamodb
1个回答
0
投票

状态是否偶然成为表的哈希键或排序键?

您无法更新密钥,DDB 将使用新密钥添加新项目,并且使用旧密钥的旧项目仍然存在。

© www.soinside.com 2019 - 2024. All rights reserved.