DynamoDB update_item:增加现有项目的值或为新项目使用 1
DynamoDB update_item: Increase values for existing items or use 1 for new item
我尝试使用 updateitem,因为它适用于更新现有项目和创建新项目的 wiki:
"Edits an existing item's attributes, or adds a new item to the table
if it does not already exist."
我要存储:
- 有人第一次打开项目
- 上次有人打开项目的时间
- 一件物品的开口次数
我有以下代码:
table.update_item(
Key={'item':"NEW"},
UpdateExpression="SET opens = if_not_exists(opens + :var1, :var0), last_open = :var2, first_open = if_not_exists(first_open, :var3)",
ExpressionAttributeValues={
':var0': "0",
':var1': "1",
':var2': '2020-04-01',
':var3': '1999-01-01'
},
ReturnValues="UPDATED_NEW"
)
遇到新项目和现有项目的错误并说
An error occurred (ValidationException) when calling the UpdateItem
operation: Invalid UpdateExpression: Syntax error; token: \"+\", near:
\"opens + :var1\""
以下适用于现有项目,但对新项目抛出错误:
table.update_item(
Key={'item':"NEW"},
UpdateExpression="SET opens = opens + :var1, last_open = :var2, first_reachout = if_not_exists(first_open, :var3)",
ExpressionAttributeValues={
':var1': "1",
':var2': '2020-04-01',
':var3': '1999-01-01'
},
ReturnValues="UPDATED_NEW"
)
只有新的错误:
"An error occurred (ValidationException) when calling the UpdateItem operation: The provided expression refers to an attribute that does not exist in the item"
我想这意味着联系人属性,但将其包含在 "if_not_exists" 中也不起作用....
您可以在 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html#Expressions.UpdateExpressions.SET 中找到 UpdateExpression 语法的文档。您问题的相关部分如下:
value ::=
operand
| operand '+' operand
| operand '-' operand
operand ::=
path | function
也就是说,“+”只能在表达式的顶层,不能在函数的参数内部。
幸运的是,有一个简单的解决方法适合您。而不是你试过的if_not_exists(opens + :var1, :var0)
,试试“:var1 + if_not_exists(opens, :var0)
。
我尝试使用 updateitem,因为它适用于更新现有项目和创建新项目的 wiki:
"Edits an existing item's attributes, or adds a new item to the table if it does not already exist."
我要存储:
- 有人第一次打开项目
- 上次有人打开项目的时间
- 一件物品的开口次数
我有以下代码:
table.update_item(
Key={'item':"NEW"},
UpdateExpression="SET opens = if_not_exists(opens + :var1, :var0), last_open = :var2, first_open = if_not_exists(first_open, :var3)",
ExpressionAttributeValues={
':var0': "0",
':var1': "1",
':var2': '2020-04-01',
':var3': '1999-01-01'
},
ReturnValues="UPDATED_NEW"
)
遇到新项目和现有项目的错误并说
An error occurred (ValidationException) when calling the UpdateItem operation: Invalid UpdateExpression: Syntax error; token: \"+\", near: \"opens + :var1\""
以下适用于现有项目,但对新项目抛出错误:
table.update_item(
Key={'item':"NEW"},
UpdateExpression="SET opens = opens + :var1, last_open = :var2, first_reachout = if_not_exists(first_open, :var3)",
ExpressionAttributeValues={
':var1': "1",
':var2': '2020-04-01',
':var3': '1999-01-01'
},
ReturnValues="UPDATED_NEW"
)
只有新的错误:
"An error occurred (ValidationException) when calling the UpdateItem operation: The provided expression refers to an attribute that does not exist in the item"
我想这意味着联系人属性,但将其包含在 "if_not_exists" 中也不起作用....
您可以在 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html#Expressions.UpdateExpressions.SET 中找到 UpdateExpression 语法的文档。您问题的相关部分如下:
value ::=
operand
| operand '+' operand
| operand '-' operand
operand ::=
path | function
也就是说,“+”只能在表达式的顶层,不能在函数的参数内部。
幸运的是,有一个简单的解决方法适合您。而不是你试过的if_not_exists(opens + :var1, :var0)
,试试“:var1 + if_not_exists(opens, :var0)
。