带有密钥的AWS DynamoDB Lambda扫描

时间:2018-12-04 08:01:59

标签: amazon-web-services lambda

我当前正在进行lambda扫描,需要扫描当前大于1mb(单次扫描的大小限制)的表。但是,根据我目前的经验,我无法为重复性操作重写代码。 这是当前通话:

 const params = {
  TableName: 'product',
};
let items = []
try {
  const result = await dynamoDbLib.call("scan", params);
  items = result.Items;
  if (result.LastEvaluatedKey) {
    params.ExclusiveStartKey = result.LastEvaluatedKey;
    const newResult = await dynamoDbLib.call("scan", params);
    items.concat(newResult.Items)
  }
  callback(null, success(items));
} catch (e) {
  callback(null, failure({ status: false }));
}

因此它会触发两次,但是应该继续进行直到未定义最后一个键。任何帮助将非常感激!

问候布拉姆

1 个答案:

答案 0 :(得分:0)

创建一个recursive function,该{{3}}在未定义LastEvaluatedKey时将停止。它将继续收集扫描结果,直到未定义LastEvaluatedKey,然后它将返回扫描结果。

async function scanTillEnd(params, items){
     const result = await dynamoDbLib.call("scan", params);
     items.concat(result.Items)
     //check if they are more items to get
     if (result.LastEvaluatedKey) {
       params.ExclusiveStartKey = result.LastEvaluatedKey;
       //scan the table again
       return await scanTillEnd(params, items)
    }
    else
       //have scanned till the end, return the results
       return items
}
const params = {
    TableName: 'product',
};
let items = []
let results = scanTillEnd(params,items)