异步删除dynamo db的多个表中的记录

时间:2017-06-09 11:37:17

标签: node.js asynchronous promise amazon-dynamodb aws-lambda

我实现了一个删除表中多个记录的代码,当删除完成后,转到另一个表删除它的记录。但问题是我没有删除表的所有记录只是查询一些具有范围键的记录(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是相同的。还想知道异步方式是否有任何漏洞,它比我使用的同步方法更好。任何性能问题或运营成本。

1 个答案:

答案 0 :(得分:0)

- >我的问题通过使用过滤器表达式并使用id扫描所有项目然后使用for循环并删除它们来解决。