Amazon dynamodb 为包含数百万项的DynamoDB表中的每个项添加一个属性
我对AWS非常陌生,但我需要为DynamoDB表中的每个项目添加一个属性(并将值设置为某物) 我正在尝试编写一个通用脚本,它将能够对传入其中的任何表执行此操作 经过一点挖掘,看起来我应该能够做到这一点,只需扫描表,获取项目,然后更新每个项目 我的问题是: (1) 这似乎是一个合理的方法吗? (2) 是否有更简单/更好的方法自动执行此操作?(在表格范围内为表格中的每个项目添加属性?)Amazon dynamodb 为包含数百万项的DynamoDB表中的每个项添加一个属性,amazon-dynamodb,Amazon Dynamodb,我对AWS非常陌生,但我需要为DynamoDB表中的每个项目添加一个属性(并将值设置为某物) 我正在尝试编写一个通用脚本,它将能够对传入其中的任何表执行此操作 经过一点挖掘,看起来我应该能够做到这一点,只需扫描表,获取项目,然后更新每个项目 我的问题是: (1) 这似乎是一个合理的方法吗? (2) 是否有更简单/更好的方法自动执行此操作?(在表格范围内为表格中的每个项目添加属性?) 是的,听起来很合理,不是很理想,但很合理 当然,总有更好的方法,但这是一种简单的方法,下面是我作为本地JS文件运行
const AWS=require('AWS-sdk');
const dynamoDb=新的AWS.dynamoDb.DocumentClient({
地区:'us-east-1'
});
异步函数主(事件、上下文){
让我们看看内容;
试一试{
//从dynamo获取物品
常量参数={
TableName:`${YOUR_TABLE_NAME}`,
};
tableContents=wait scanDB(参数);
}捕捉(错误){
控制台日志(err);
返回错误;
}
让调用=[];
tableContents.forEach(函数(值){
设params={
表达式属性值:{
“:newAttribute”:false,
},
关键:{
“索引键”:value.indexKey
},
TableName:`${YOUR_TABLE_NAME}`,
UpdateExpression:“设置newAttribute=:newAttribute”,
};
calls.push(dynamoDb.update(params.promise());
});
让我们回应;
试一试{
响应=等待承诺。所有(呼叫);
}捕捉(错误){
控制台日志(err);
}
返回响应;
}
异步函数scanDB(params){
让动态内容=[];
让项目;
做{
items=等待dynamoDb.scan(params.promise();
items.items.forEach((item)=>dynamoContents.push(item));
params.ExclusiveStartKey=items.LastEvaluatedKey;
}while(typeof items.LastEvaluatedKey!=“未定义”);
返回动态内容;
};
main()代码>没有更简单的方法,但是给定的方法也会有问题,比如应用程序是否也在尝试写入表?您可以做的另一件事是不必随时更新所有项,而是在请求时更新这些项。如果另一个应用程序在扫描和更新的同时尝试写入表,您是否知道默认行为是什么?第一个到达项目的会成功吗,但是第二个尝试进行更新的会失败吗?这真的很有帮助。谢谢