DynamoDB - обновить / создать элемент с помощью Ha sh и ключа Range в TransactWrite - PullRequest
1 голос
/ 27 мая 2020

У меня есть следующая таблица:

"KeySchema": [
    {
      "AttributeName": "Value",
      "KeyType": "HASH"
    },
    {
      "AttributeName": "Id",
      "KeyType": "RANGE"
    }
]

Я пытаюсь обновить запись, но если она не существует, создайте ее.

Этого не произошло. работает, потому что кажется, что вы не можете обновить ключ Range? (поле Id не изменится, а Value изменится)

Я читал, что лучше всего удалить элемент, а затем создать его заново. Однако это приводит к ошибке Transaction request cannot include multiple operations on one item.

Очень просто, я бы хотел go из этой записи:

  Item: {
     Value: 'Email|tim@apple.com',
     Id: '01E9AR3D4MQ3CDKE98SM8CR5Q3'
  }

к этому (и если Key из Id и Value не существует, создайте его):

  Item: {
     Value: 'Email|tim1@apple.com',
     Id: '01E9AR3D4MQ3CDKE98SM8CR5Q3'
  }

Но кажется, что я не могу легко сделать это в пределах this.db.transactWrite(req).promise()

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Я думаю, вы можете использовать запрос PUTItem, он создаст новую строку, если она отсутствует, или обновит ее, если она уже существует.

Просто имейте в виду, что в запросе PUTItem есть все данные строки (в случае, если у вас есть столбцы, отличные от HA SH и RANGE), в противном случае некоторые данные могут быть потеряны.

Примечание: Запрос PUTItem также может использоваться в запросах BatchWriteItem.

Некоторые полезные ссылки:

Надеюсь, это вам поможет.

0 голосов
/ 28 мая 2020

Во-первых, разве вы не хотите, чтобы ваша электронная почта была вашим ключом сортировки? Ваши идентификаторы выглядят как ха sh и у них нет заказа, или я что-то упустил?

Я думаю, на самом деле вы делаете что-то не так. Идентификатор действительно никогда не следует обновлять. Вместо этого используйте обычный атрибут email/age/etc, и вы можете создать LSI на нем, если ваш ключ раздела не изменился, или GSI, если вам нужно изменить ключ раздела, а затем запросить эту таблицу.

Вы не делаете ' Для этого не нужно удалять и заново создавать значения.

...