2017-06-09 5 views
0

テーブル内の複数のレコードを削除するコードを実装しました。削除が完了すると、レコードを削除する別のテーブルに移動します。しかし、問題は、範囲キー(id = '1423')とこのキーに関連するすべてのレコードを取得してforeachループを使用するレコードのいくつかにクエリを作成しているテーブルのすべてのレコードを削除しないことです。他のテーブルでも同じことをしています。私のコードについてdynamo dbの複数のテーブルでレコードを非同期に削除する

のキーポイント:両方のテーブル「ID」の主キーではなく、また、表Aと表BIの両方で、この同じ「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') 
     } 
     } 
    }) 
    }) 
} 

私はこのデータ関数を、他の2つのファイルで、パラメータに異なるテーブル名を渡すだけです。つまり、function(tableName、id)とidは同じです。また、そこには非同期的な方法での抜け穴があることを知りたがっており、私が使用している同期方法よりも優れています。パフォーマンス上の問題や運用コスト。

答えて

0

- >私の問題は、フィルター式を使用して解決し、すべてのアイテムをIDでスキャンし、forループを使用してそれらを削除します。

関連する問題