我是 AWS 的新手,但我需要为 DynamoDB 表中的每个项目添加一个属性(并将值设置为某些内容(。
我正在尝试编写一个通用脚本,该脚本将能够对传入的任何表执行此操作。
经过一番挖掘,看起来我应该能够通过扫描表格、获取项目,然后更新每个项目来做到这一点。
我的问题是:(1(这似乎是一个合理的方法吗?(2(有没有更简单/更好的方法来自动执行此操作?(在表范围内向表中的每个项目添加一个属性?
- 是的,这听起来很合理,不理想,但合理
- 当然,总有更好的方法,但这是一种简单的方法,这是我作为本地 JS 文件运行的片段......
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();
祝你好运!