web-dev-qa-db-ja.com

update_itemでif_not_existsとlist_appendを組み合わせることは可能ですか?

Boto3でDynamoDBの_update_item_機能を使用しようとしています。

現在、アイテムのリストを更新するのに苦労しています。リストがまだ存在しない場合は新しいリストを作成し、それ以外の場合は既存のリストに追加します。

SET my_list = list_append(my_list, :my_value)の形式のUpdateExpressionを使用すると、エラーが返されます"指定された式は、アイテムに存在しない属性を参照しています"リストが存在しない場合まだ。

UpdateExpressionをどのように変更しなければならないか考えていますか?

ありがとう、よろしく、ファビアン

54
fabian

list_append(if_not_exists())構造を使用できます。

UpdateExpression:

'SET my_list2 = list_append(if_not_exists(my_list2, :empty_list), :my_value)'

ExpressionAttributeValues:

{ ":my_value":[{"S":"test"}], ":empty_list":[] }
106
Boris Serebrov

Borisソリューションの代わりに、リストのデータ型の代わりに set を使用し、ADDキーワードを使用することもできます。

追加すると、更新式はADD setName :s

式の属性値は次のようになります。{":s": {"SS":["First", "Second"]}}

http://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html#Expressions.UpdateExpressions.ADD

3
Ayush Pateria