Is it possible to combine if_not_exists and list_append in update_item

Amazon DynamodbBoto3

Amazon Dynamodb Problem Overview


I'm trying to use the update_item functionality for DynamoDB in boto3.

I'm struggling right now to update lists for items. I would like to create a new list if the list does not exist yet and otherwise append to the existing list.

Using an UpdateExpression of the form SET my_list = list_append(my_list, :my_value) returns an error "The provided expression refers to an attribute that does not exist in the item" if the list does not exist yet.

Any idea how I would have to modify my UpdateExpression?

Amazon Dynamodb Solutions


Solution 1 - Amazon Dynamodb

You can use list_append(if_not_exists()) construction.

UpdateExpression:

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

ExpressionAttributeValues:

{ ":my_value":{"L": [{"S":"test"}]}, ":empty_list":{"L":[]} }

Solution 2 - Amazon Dynamodb

An alternative to Boris solution could be to use set instead of list datatype and use the ADD keyword, it does exactly what you want.

With Add, the update expression becomes: ADD setName :s

And the expression attribute values can be like: {":s": {"SS":["First", "Second"]}}

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionfabianView Question on Stackoverflow
Solution 1 - Amazon DynamodbBoris SerebrovView Answer on Stackoverflow
Solution 2 - Amazon DynamodbAyush PateriaView Answer on Stackoverflow