我实现了一个删除表中多个记录的代码,当删除完成后,转到另一个表删除它的记录。但问题是我没有删除表的所有记录只是查询一些具有范围键的记录(id =' 1423')以及与此键相关的所有记录我得到并使用foreach循环然后我删除了记录。我在其他表中也是如此。
关于我的代码的KeyPoints:在表格中#34; id"不是主键,同时在表A和表B中都有这个相同的" id" = 1423。
代码段:
data: function(tableName, id){
return new Promise(function(resolve, reject){
var scanParams = {
TableName: tableName,
KeyConditionExpression: "#getId = :p",
ExpressionAttributeNames:{
"#getId": "id"
},
FilterExpression: '#getId = :v1' ,
ExpressionAttributeValues:{
":v1" : id
}
};
AWS.docClient.scan(scanParams, function(err, data) {
if (!_.isNil(err)) {
console.error("Error :", JSON.stringify(err, null, 2));
reject(err)
} else {
if(_.size(data.Items) > 0){
data.Items.forEach(function(obj, i){
var params = {
TableName: scanParams.TableName,
Key: {"hashKey":obj[hashKey]},
ReturnValues: 'NONE', // optional (NONE | ALL_OLD)
ReturnConsumedCapacity: 'NONE', // optional (NONE | TOTAL | INDEXES)
ReturnItemCollectionMetrics: 'NONE', // optional (NONE | SIZE)
}
AWS.docClient.delete(params, function(err, data) {
if (err) {
console.error("Unable to delete items :", JSON.stringify(err, null, 2));
reject(err)
} else {
console.log('Deleted the records in the table')
resolve('success')
}// successful response
});
})
} else {
console.log('No record in table')
resolve('success')
}
}
})
})
}
我在其他两个文件中调用此数据函数只是在参数中传递不同的表名,即,这里:function(tableName,id)和id是相同的。还想知道异步方式是否有任何漏洞,它比我使用的同步方法更好。任何性能问题或运营成本。
答案 0 :(得分:0)
- >我的问题通过使用过滤器表达式并使用id扫描所有项目然后使用for循环并删除它们来解决。