我有一个类似于下面的表格:

我使用的是AWS CLI,特别是:
appId="ABC"
aws dynamodb update-item \
--table-name XTable \
--key "{\"appId\":{\"S\":\"${appId//[$'\t\r\n ']}\"}}" \
--update-expression "SET startDate = :sd, endDate = :ed" \
--expression-attribute-values '{":sd": {"S": "14/11/2020 23:30:00"}, ":ed": {"S": "15/11/2020 01:17:00"}}' \
--return-values ALL_NEW 目前,我可以像这样扫描并迭代条目:
aws dynamodb scan --table-name XTable--query "Items[*].[appId.S]" --output text 但是,有没有办法对多个键进行更新呢?
发布于 2020-11-17 17:27:09
DynamoDB不提供一个api来在一个请求中更新多个项目的。您必须指定要更新的所有项目的完整密钥。
您可以利用BatchWriteItem,它允许在一个请求中删除Put和多个元素。
请注意,PutItem用于将项写入到表中,这可以完全覆盖具有相同键的现有项。
如果您希望所有的读或写操作一起成功或失败,您还可以利用transactions。
BatchWrite或事务类别用于在单个请求中读写多个DynamoDB项。虽然这些操作一次操作多个项目,但它们仍然是基于项目的操作,因为您必须指定要操作的确切项目。
我的建议是扫描表,并为每个结果应用一个更新项。
DynamoDB应用编程接口可能看起来很有限,但它是有意为之的。理解DynamoDB的关键点是,它不会让您编写糟糕的查询。
发布于 2020-11-19 09:16:32
我已经使用scan then loop for each entry实现了它。但是,这意味着如果表中有100个条目,它将执行100次更新调用。我正在寻找一种方法来节省100次调用,如果可能的话,只用所有的键执行一次更新调用,特别是因为要更新的值是相同的日期?
这是我的解决方案,我在问是否有其他方法来节省多个呼叫:
#!/bin/bash
for appId in $(aws dynamodb scan --table-name XTable --query "Items[*].[applicationId.S]" --output text) ;
do
echo "start updating $appId"
aws dynamodb update-item \
--table-name XTable \
--key "{\"appId\":{\"S\":\"${appId//[$'\t\r\n ']}\"}}" \
--update-expression "SET startDate = :sd, endDate = :ed" \
--expression-attribute-values '{":sd": {"S": "01/01/2020 03:30:00"}, ":ed": {"S": "15/01/2020 11:00:00"}}' \
--return-values ALL_NEW
echo "completed $appId"
done https://stackoverflow.com/questions/64871489
复制相似问题