是否可以在 update_item 中组合 if_not_vis 和 list_append

我试图在 boto3中使用 DynamoDB 的 update_item功能。

我现在正在努力更新项目列表。如果该列表尚不存在,我想创建一个新列表,否则将附加到现有列表。

如果列表还不存在,则使用形式为 SET my_list = list_append(my_list, :my_value)UpdateExpression返回错误 “提供的表达式引用项目中不存在的属性”

你知道我要怎么修改我的 UpdateExpression吗?

28539 次浏览

可以使用 list_append(if_not_exists())构造。

更新表达式:

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

数值:

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

更新 : 正如注释中提到的,boto3现在为上面的表达式引发一个错误,一个没有显式类型的版本可以工作: { ":my_value": ["test"], ":empty_list":[] }

鲍里斯解决方案的一个替代方案可以是使用 准备好了而不是列表数据类型,并使用 ADD 关键字,它可以完全满足您的需要。

通过 Add,更新表达式变为: ADD setName :s

表达式属性值可以类似于: {":s": {"SS":["First", "Second"]}}

Http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/expressions