Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon dynamodb 如果不存在,是否可以合并并在更新项中列出追加_Amazon Dynamodb_Boto3 - Fatal编程技术网

Amazon dynamodb 如果不存在,是否可以合并并在更新项中列出追加

Amazon dynamodb 如果不存在,是否可以合并并在更新项中列出追加,amazon-dynamodb,boto3,Amazon Dynamodb,Boto3,我正在尝试在bot3中使用DynamoDB的update\u项功能 我现在正在努力更新项目列表。如果列表还不存在,我想创建一个新的列表,或者附加到现有列表中 使用SET my_list=list_append(my_list,:my_value)格式的UpdateExpression,如果列表尚不存在,则返回错误“提供的表达式引用的属性在项中不存在” 你知道我该如何修改我的UpdateExpression 谢谢并致以最良好的问候, Fabian您可以使用list\u append(如果不存在()

我正在尝试在bot3中使用DynamoDB的
update\u项
功能

我现在正在努力更新项目列表。如果列表还不存在,我想创建一个新的列表,或者附加到现有列表中

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

你知道我该如何修改我的
UpdateExpression

谢谢并致以最良好的问候,
Fabian

您可以使用
list\u append(如果不存在())
构造

UpdateExpression:

'SET my_list2 = list_append(if_not_exists(my_list2, :empty_list), :my_value)'
表达式属性值:

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

Boris解决方案的另一种选择是使用而不是list datatype,并使用ADD关键字,它完全满足您的需要

使用Add,更新表达式变为:
addsetname:s

表达式属性值可以是这样的:
{:s:{“SS”:[“First”,“Second”]}


你知道这是否取决于比赛条件吗?我查看了AWS文档,它们似乎没有任何锁定/事务(至少对于Python SDK是这样)。这段代码似乎可以a:从数据库中读取列表,b:追加新值,c:覆盖旧值,这可能会在这段时间内被更改。我在文档中找不到直接的确认,但我希望单个UpdateItem操作是原子的,这是我在常见问题解答中找到的最接近的东西-“您可以使用单个API调用增加或减少行中的数值属性。类似地,您可以自动添加或删除集合、列表或映射”,请参阅@aidinism我认为您误解了问题和答案。这不是关于防止重复值,问题是“如果列表尚不存在,如何创建新列表,否则如何附加到现有列表中”。“.非常感谢你的建议!如果有人感兴趣,我可以在这里为我的项目工作:我必须将我的
ExpressionAttributeValues
设置为
{:my_值:{“L”:[{“S”:“test”}},”:empty_list:{“L”:[]}}
,用于遇到与我相同问题的任何人。请注意,“集合中值的顺序没有保留”因此,如果您想要一个
有序集合
,那么您需要一个列表。您的表达式示例具有误导性,因为
[“第一”、“第二”]
很容易返回为
[“第二”、“第一”]
。set的优点是它不包含重复项。我喜欢这个解决方案。请注意,
set
type只能包含标量元素(因此没有
map
type的集合)