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

仅当新属性大于现有属性时,DynamoDb才会更新项

长孙阳嘉
2023-03-14

只有当新项目的日期比现有项目更近时,我才想更新DynamoDB中的项目。目前,我正在查询现有项目,在代码中进行比较,然后写入数据库。我想知道是否有办法让DynamoDB为我进行检查。我已经研究过使用预期,但是它的比较运算符需要引入一个参数,这违背了目的,因为这意味着无论如何都必须查询现有项目。

我和8Java一起工作。

共有1个答案

柯曦
2023-03-14

条件表达式可用于检查条件,并在条件满足时更新项。这类似于SQL语句中的WHERE条件。不同之处在于:-

1) DynamoDB需要分区键和范围键来更新该项。非关键属性条件可以在条件表达式中给出

2)DynamoDB一次只能更新一项。

ConditionExpression-(字符串)条件更新要成功必须满足的条件。

预期-(map)这是一个遗留参数,用于向后兼容。新应用程序应该使用条件表达式代替。不要将遗留参数和表达式参数结合在一个单一的应用编程接口调用中;否则,DynamoDB将返回一个验证异常。

示例代码:-

仅当现有值“createdate”属性小于新值(即,换句话说,新值大于表中的现有值)时,以下代码才会更新该项。

UpdateItemSpec updateItemSpec = new UpdateItemSpec().withPrimaryKey("yearkey", yearKey, "title", title)
        .withReturnValues(ReturnValue.UPDATED_NEW).withUpdateExpression("set #createdate = :val1")
        .withNameMap(new NameMap().with("#createdate", "createdate"))
        .withValueMap(new ValueMap().withString(":val1", createDate))
        .withConditionExpression("createdate < :val1");

UpdateItemOutcome outcome = null;
try {
    outcome = table.updateItem(updateItemSpec); 
} catch (ConditionalCheckFailedException ce) {
    System.out.println("Conditional check failed." + ce.getMessage());
    return false;
}

return true;
 类似资料:
  • 问题内容: 我正在NHibernate中对单个属性执行标准更新。但是,在提交事务时,sql更新似乎设置了我映射到表上的所有字段,即使它们没有更改。当然这不是Nhibernate中的正常行为吗?难道我做错了什么?谢谢 问题答案: 这是正常现象。您可以尝试添加到类定义中以覆盖此行为。

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

  • 问题内容: 在数据加载中,似乎某些XML属性映射不正确,我现在正尝试纠正此问题,但在MySQL对XML列的处理方面遇到了麻烦。 我想为带有子字段(属性为’code =“ 3”’)的字段(属性为’tag =“ 520”’)的所有出现的字段纠正XML属性(非值)。下面的查询返回受影响的0行,找到1行。关于如何实现这一目标的任何线索。 为了清晰起见,包含了XML片段: 原始片段 结果是我想要的: 无法解

  • Hibernate的property元素具有update、insert属性,根据文档,它声明-http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/mapping.html#mapping-声明属性 update,insert(可选-默认为true):指定映射列应包含在SQL update和/或insert语句中。将两者都设置为f

  • SyntaxError:无效输入“h”:预期为“I/I”(第10行,第28列(偏移量:346))“merge(p:primaryconsumer),其中p.name=svc.name” 我100%确信这些名称是唯一的,并且将与现有节点集中的唯一使用者名称相匹配(有待观察)。 当唯一节点属性匹配时,如何将现有属性添加到新数据中?(我希望获得唯一的ID,但我必须能够在匹配上执行新数据的更新)

  • 操作步骤: ●单条字段属性更新 ①在"图层管理"模块,选择一个带有数据的图层,点击"数据视图"。 ②双击击字段属性内容,进入编辑状态,进行编辑。 ③编辑完成后点击"确定"按钮,属性内容更新成功。 提示: ●批量更新属性内容。 操作动图: [查看原图]