我正在尝试完成对dynamodb的批量更新。我正在尝试确定是否可以在批处理更新中添加一个条件,该条件表明如果其中一个列等于某个值(其值为true),则应更新项目,否则请更新。.不要更新。这可能吗? / p>
答案 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'
为满足您的需求,您需要使用弹性搜索来获取正确的项目,然后才能通过密钥更新数据。