Как мне обновить многие атрибуты в DynamoDB - PullRequest
2 голосов
/ 15 марта 2019

Я видел много примеров использования UpdateExpression для обновления атрибутов с использованием метода updateItem.Однако я до сих пор не понимаю, как динамически обновлять несколько атрибутов в DynamoDB одновременно.

Я пытаюсь обновить И переименовать несколько атрибутов в одном вызове updateItem.Я понимаю, что это требует удаления старого имени и набора нового имени.У меня есть эти имена в hashedId объектов, но их не будет до времени выполнения.Поэтому мой вопрос заключается в том, как использовать UpdateExpression с переменными, а не с жестко закодированной строкой?

Все примеры, которые я видел, используют жестко закодированные UpdateExpressions.

не может обновить элемент в DynamoDB

Dynamo DB: UpdateItemSpec: Многократное выражение обновления - не работает

Обновление DynamoDB Элемент мультидействие

Как переименовать столбец / ключ DynamoDB

Я работаю на Java.

Мне кажется очень странным, что я не смог найти пример этого ... что наводит меня на мысль, что я делаю что-то не так.

Спасибо за помощь!

1 Ответ

1 голос
/ 16 марта 2019

Вы должны построить строку выражения обновления динамически на основе имен атрибутов и значений, которые вы получаете во время выполнения.Я делаю именно это.Я не работаю в Java, но вот пример псевдокода (с уклоном Ruby) для вас, который динамически создает строку выражения обновления, хэш имен атрибутов выражения и хэш значений атрибута выражения.Затем вы можете подключить эти 3 вещи в метод update_item:


update_exp_set = [] //array of remove expression snippets
update_exp_remove = [] //array of update expression snippets

exp_attribute_names = {} //hash of attribute names
exp_attribute_values = {} //hash of attribute values

// Iterate through all your fields and add things as needed to your arrays and hashes.
// Two examples are below for a field with the name <fieldName> and value <fieldValue>.
// You'll need to convert this to Java and update it to make sense with the AWS Java SDK.

// For a given field that needs to be updated:
update_exp_set << "#<fieldName> = :fieldValue" //add to array of set expression snippets
exp_attribute_names["#<fieldName>"] = "<fieldName>" //add to hash of attribute names
exp_attribute_values[":<fieldValue>"] = "<fieldValue>" //add to hash of attribute values

// For a given field that needs to be removed:
update_exp_remove << "#<fieldName>"
exp_attribute_names["#<fieldName>"] = "<fieldName>" //add to hash of attribute names

// Use your snippets to create your full update expression:
update_exp_set_clause = ""
update_exp_remove_clause = ""
if update_exp_set.length != 0 //check if you have something to set
  update_exp_set_clause = "SET " + update_exp_set.join(',')
end
if update_exp_remove.length != 0 //check if you have something to remove
  update_exp_remove_clause = "REMOVE" + update_exp_remove.join(',')
end
final_update_exp = update_exp_set_clause + " " + update_exp_remove_clause

Помогает ли это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...