我对AWS来说还很陌生,但是我需要为DynamoDB表中的每个单个项目添加一个属性(并将值设置为某种值)。
我正在尝试编写一个通用脚本,该脚本将能够对传递到其中的任何表执行此操作。
经过一些挖掘,看来我应该能够做到这一点,只需扫描表,获取项目,然后更新每个项目即可。
我的问题是: (1)这似乎是一种合理的方法吗? (2)有没有更简单/更好的方法来自动执行此操作? (在表范围内向表中的每个项目添加属性吗?)
答案 0 :(得分:1)
const AWS = require('aws-sdk');
const dynamoDb = new AWS.DynamoDB.DocumentClient({
region:'us-east-1'
});
async function main(event, context) {
let tableContents;
try{
//get items from dynamo
const params = {
TableName: `${YOUR_TABLE_NAME}`,
};
tableContents = await scanDB(params);
}catch(err){
console.log(err);
return err;
}
let calls = [];
tableContents.forEach(function(value){
let params = {
ExpressionAttributeValues: {
":newAttribute": false,
},
Key: {
"indexKey": value.indexKey
},
TableName: `${YOUR_TABLE_NAME}`,
UpdateExpression: "SET newAttribute = :newAttribute",
};
calls.push(dynamoDb.update(params).promise());
});
let response;
try{
response = await Promise.all(calls);
}catch(err){
console.log(err);
}
return response;
}
async function scanDB(params) {
let dynamoContents = [];
let items;
do{
items = await dynamoDb.scan(params).promise();
items.Items.forEach((item) => dynamoContents.push(item));
params.ExclusiveStartKey = items.LastEvaluatedKey;
}while(typeof items.LastEvaluatedKey != "undefined");
return dynamoContents;
};
main();
祝你好运!