首页 > 解决方案 > 用 DynamoDB 中的新项目替换旧项目

问题描述

我正在使用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”是相同的,因此较新的“chosen#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”只有一个唯一的行

标签: amazon-web-servicesgoamazon-dynamodb

解决方案


当您有复合主键(分区键+排序键)时,这两个字段的组合是唯一的,而不是分区键。


推荐阅读