Заменить старый элемент новым в DynamoDB - PullRequest
0 голосов
/ 19 мая 2019

Я использую https://godoc.org/github.com/aws/aws-sdk-go-v2/service/dynamodb#DynamoDB.PutItemRequest

Моя функция выглядит следующим образом:

  func (h dynamoHandler) save(selection DeliveryDate) (err error) {
      av, err := dynamodbattribute.MarshalMap(selection)
      if err != nil {
          log.WithError(err).Error("failed to marshal selection")
          return
      }

      req := h.db.PutItemRequest(&dynamodb.PutItemInput{
          TableName: aws.String(h.Table),
          Item:      av,
      })
      _, err = req.Send()

      if err != nil {
          log.WithField("table", h.Table).WithError(err).Error("putting dynamodb")
          return
      }
      return
  }

Я предполагал, что, поскольку ключ раздела "wfr5a" такой же, более новый "selected # 2019-05-19T13: 42: 54 + 08: 00 "(составной ключ и ключ сортировки) должен был заменить строку.

"OrderID (S)","StatusDate (S)","LastUpdated (S)"
"wfr5a","chosen#2019-05-19T13:42:54+08:00","2019-05-19T13:49:34+08:00"
"wfr5a","proposal#2019-05-19T13:42:54+08:00","2019-05-19T13:42:58+08:00"

Хотя, как вы можете видеть, он создал новый элемент.Чего мне не хватает, так что он просто заменяет запись, т.е. имеет только одну уникальную строку для "wfr5a"

Ответы [ 2 ]

1 голос
/ 19 мая 2019

когда у вас есть составной первичный ключ (ключ раздела + ключ сортировки), комбинация двух полей уникальна, а не ключ раздела.

0 голосов
/ 20 мая 2019

Похоже, что вам нужно сделать, это удалить ключ сортировки из схемы. Таким образом, каждый элемент будет уникально идентифицирован только по ключу раздела.

Не существует API для замены всех элементов, имеющих ключ раздела, поэтому для реализации описываемого вами поведения вам придется выполнить транзакцию запрос-удаление-вставка, чтобы фактически заменить старый элемент новым, если вы не измените схема.

...