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)