当前位置: 首页 > 知识库问答 >
问题:

DynamoDB update_项:增加现有项的值或使用1表示新项

海宁
2023-03-14

我尝试使用updateItem作为根据维基它的作品更新现有的

编辑现有项的属性,或者在表中添加一个新项(如果它不存在)

我想储存:

  • 第一次有人打开物品
  • 上次有人打开物品
  • 一个项目的开口数

我有以下代码:

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"
                )

遇到新的错误

调用UpdateItem操作时发生错误(ValidationException):无效的UpdateExpression:语法错误;标记:\“\”,靠近:\“打开: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"
            )

只有新的错误:

“调用UpdateItem操作时发生错误(ValidationException):提供的表达式引用了项中不存在的属性”

我猜这意味着联系人属性,但将其包含在“if_not_exists”中也不起作用。。。。

共有1个答案

钱瑞
2023-03-14

您可以在中找到UpdateExpression语法的文档https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html#Expressions.UpdateExpressions.SET.你的问题的相关部分如下:

value ::=
    operand
    | operand '+' operand
    | operand '-' operand

operand ::=
    path | function

也就是说,“”只能位于表达式的顶层,不能位于函数的参数内。

幸运的是,有一个简单的解决方法。不要尝试if_not_exists(打开: var1,: var0),而是尝试": var1if_not_exists(打开: var0)

 类似资料:
  • 操作步骤 1.通过 tableID 实例化一个 TableObject 对象,操作该对象即相当于操作对应的数据表 let MyTableObject = new BaaS.TableObject(tableID) 参数说明 参数 类型 必填 说明 tableID Number 是 数据表 ID 2.本地创建一条空记录 let MyRecord = MyTableObject.create() 3.

  • {% tabs first=”SDK 1.1.0 及以上版本”, second=”SDK 1.1.0 以下版本” %} {% content “first” %} SDK 1.1.0 及以上版本 操作步骤 1.通过 tableID 实例化一个 TableObject 对象,操作该对象即相当于操作对应的数据表 let MyTableObject = new wx.BaaS.TableObject(t

  • 问题内容: 在我们的数据库中,有一个用创建的表。现在,我们使用此表创建了一个视图。我们想为此视图添加聚簇索引。 创建聚簇索引时,它会显示一个错误,例如无法创建索引,因为此特定表的ANSI_NULL已关闭。 该表包含大量数据。因此,我想将此选项更改为ON,而不会丢失任何数据。 有什么方法可以更改表来修改此选项。请提出您的建议。 问题答案: 这是交叉发布在数据库管理员上的,所以我也可以在这里发布我的答

  • 问题内容: 我想编写Sql Query,以按百分比增加商品价格。 场景是:- 在表中,我有3个栏目:ID,项目名称,价格 问题答案: 如果您要更新表,则可以进行条件更新。 如果您希望在选择时不对表进行任何更新就显示增加的价格,则可以执行以下操作。

  • 问题内容: 我有一个现有的日期对象,希望将其增加一天,同时将其他所有字段保持不变。我遇到的每个示例都耗时数小时/分钟/秒,或者您必须创建一个新的日期对象并转移字段。有没有一种方法可以将日字段提前1? 谢谢 编辑:对不起,我并不是说要把当天的值增加一,我的意思是将日期提前1 问题答案: Calendar c = Calendar.getInstance(); c.setTime(yourdate);

  • 因此,我在DynamoDB中有一项: 我想添加一个新的属性到上述项目,属性是: 现在,我在JS中使用AWS-SDK这样做: 但是,我得到一个错误: ExpressionAttributeValue包含无效值:一个或多个参数值无效:AttributeValue不能包含key:newAttr的空字符串 所以如果我是这样就可以了,但我不希望这个新属性是一个字符串,我希望它是一个列表。 那么我做错了什么?