首页 > 解决方案 > 如何根据另一个属性的条件更新 dynamodb 属性

问题描述

例如:

我有:

{
 "status": "running",
 "ts": "1590560955"
}

如果当前系统 ts >= 高于“ts”,则:

{
 "status": "completed",
 "ts": "1590560955"
}

这甚至可能吗?Lambda 函数在这里有帮助吗?如果是,如何?

标签: amazon-dynamodb

解决方案


对的,这是可能的。它被称为“有条件的更新”——例如参见本文档。您可以根据不同属性的值更新一个属性 - 如果这些属性属于同一项目

这是一个示例(在 Python 中,使用 Amazon 的 boto3 库,但您可以将其翻译成您喜欢的任何语言):

table.update_item(
        Key={'p': p},
        UpdateExpression='SET status = :completedl',
        ConditionExpression='ts > :currentts',
        ExpressionAttributeValues={':completed': 'completed', ':currenttts': currentts})

这有条件地使用 key 更新项目p:如果ConditionExpression已完成,即项目的ts值高于“currentts”(您将提供),那么UpdateExpression将发生中描述的更新:该项目的status属性设置为字符串“已完成” .


推荐阅读