Dynamodb的PutItem使用条件更新

时间:2019-01-06 09:30:30

标签: amazon-dynamodb

我正在尝试完成对dynamodb的批量更新。我正在尝试确定是否可以在批处理更新中添加一个条件,该条件表明如果其中一个列等于某个值(其值为true),则应更新项目,否则请更新。.不要更新。这可能吗? / p>

4 个答案:

答案 0 :(得分:0)

您可以在单个项目更新上放置条件表达式,以在条件不满足时使更新失败。但是,它不会使整个批次失败,仅会使单个更新失败。批处理更新响应将包含有关哪些更新成功和失败的信息

答案 1 :(得分:0)

您应该查看DynamoDB transactions。它具有您要查找的条件表达式,并且全部或不批量更新。

答案 2 :(得分:0)

我猜您正在寻找条件表达式,请选中此link

您应该使用UpdateItem,它可以编辑现有项目的属性,或者将新项目添加到表中(如果尚不存在)。

例如从aws doc复制,

下面的示例执行UpdateItem操作。它尝试将产品的价格降低75,但如果当前价格低于500,条件表达式将阻止更新:

aws dynamodb update-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --update-expression "SET Price = Price - :discount" \
    --condition-expression "Price > :limit" \
    --expression-attribute-values file://values.json

表ProductCatalog就是这样,

{
    "Id": { "N": "456"},
    "Price": {"N": "650"},
    "ProductCategory": {"S": "Sporting Goods"}
}

和values.json这样,

{
    ":discount": { "N": "75"},
    ":limit": {"N": "500"}
}

这里最初的价格是650,如果价格大于500,您要使用条件表达式尝试将价格降低75。因此,前两次运行update-item应该会起作用,而第三次运行是因为price降低到500 (不大于500)运行将失败。

答案 3 :(得分:-3)

可以通过使用条件表达式作为过滤器表达式来实现。但是请不要这样做。

DynamoDB是键值NoSQL。这意味着您只能通过按键来获取正确的数据。如果您执行过滤器,它将遍历大量记录并降低应用程序速度。 您可以查看这篇文章: 5 things that you should know about DynamoDB

因此,当您对数据进行增删改查时,建议的与数据交互的方式是通过密钥。我可以将其转换为伪代码,如下所示:

GET: SELECT * FROM THE TABLE WHERE Id ='SampleId'
UPDATE: UPDATE THE ITEM WHERE id = 'SampleId'
DELETE: DELETETHE ITEM WHERE id = 'SampleId'

为满足您的需求,您需要使用弹性搜索来获取正确的项目,然后才能通过密钥更新数据。