Удалить строковый атрибут DynamoDB с пакетом выражений golang - PullRequest
0 голосов
/ 29 апреля 2020

У меня проблемы с удалением атрибута элемента динамодаба с помощью команды UpdateItem: https://docs.aws.amazon.com/sdk-for-go/api/service/dynamodb/expression/#Builder .WithUpdate

    expr := expression.Set(
        expression.Name("my_attribute_a"),
        expression.Value(""),
    ).Set(
        expression.Name("my_attribute_b"),
        expression.Value(""),
    )

    update, err := expression.NewBuilder().
        WithUpdate(expr).
        Build()
    if err != nil {
        return fmt.Errorf("failed to build update expression: %v", err)
    }

    input := &dynamodb.UpdateItemInput{
        TableName:                 &ddb.emailAccountTableName,
        ExpressionAttributeNames:  update.Names(),
        ExpressionAttributeValues: update.Values(),
        Key: map[string]*dynamodb.AttributeValue{
            "id": {
                S: &id,
            },
        },
        UpdateExpression:       update.Update(),
        ReturnConsumedCapacity: aws.String(dynamodb.ReturnConsumedCapacityTotal),
    }
    fmt.Println(input.String())
    result, err := ddb.svc.UpdateItem(input)

Результат выполнения выше:

{
  ExpressionAttributeNames: {
    #1: "my_attribute_a",
    #0: "my_attribute_b"
  },
  ExpressionAttributeValues: {
    :0: {
      NULL: true
    },
    :1: {
      NULL: true
    }
  },
  Key: {
    id: {
      S: "38zqtaNezbB8eZw4pbJKm7"
    }
  },
  ReturnConsumedCapacity: "TOTAL",
  TableName: "my-table",
  UpdateExpression: "SET #0 = :0, #1 = :1\n"
}

И в результате атрибуты для элемента устанавливаются на true. Я хочу, чтобы атрибуты были удалены. Я пытался использовать nil, но это дает тот же результат, и expression.Null просто устанавливает строку в значение NULL

1 Ответ

0 голосов
/ 29 апреля 2020

Оказывается, мне нужно было использовать expression.Remove вместо expression.Set. Вот соответствующее обновление:

expr := expression.Remove(
    expression.Name("my_attribute_a"),
).Remove(
    expression.Name("my_attribute_b"),
)

update, err := expression.NewBuilder().
    WithUpdate(expr).
    Build()

Что приводит к следующему:

{
  ExpressionAttributeNames: {
    #0: "my_attribute_a",
    #1: "my_attribute_b
  },
  Key: {
    id: {
      S: "qfsphqt37ELyn2BanwE2fd"
    }
  },
  ReturnConsumedCapacity: "TOTAL",
  TableName: "my-table",
  UpdateExpression: "REMOVE #0, #1\n"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...