繁体   English   中英

Function 递归扫描 AWS Dynamo DB 以获取 Nodejs

[英]Function to scan AWS Dynamo DB recursively for Nodejs

所以我需要在 node.js 中递归node.js来替换这个 function 调用:

docClient.scan(params, callback)

更多信息请参阅http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.NodeJs.04.html

这是执行扫描直到LastEvaluatedKey可用的递归代码。

var AWS = require("aws-sdk");
var creds = new AWS.Credentials('akid', 'secret', 'session');

AWS.config.update({
    region: "us-west-2",
    endpoint: "http://localhost:8000",
    credentials : creds
});

var docClient = new AWS.DynamoDB.DocumentClient();

var params = {
    TableName: "Movies"
};

console.log("Scanning Movies table.");
docClient.scan(params, onScan);
var count = 0;

function onScan(err, data) {
    if (err) {
        console.error("Unable to scan the table. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        // print all the movies
        console.log("Scan succeeded.");
        data.Items.forEach(function(movie) {
           console.log("Item :", ++count,JSON.stringify(movie));
        });

        // continue scanning if we have more movies
        if (typeof data.LastEvaluatedKey != "undefined") {
            console.log("Scanning for more...");
            params.ExclusiveStartKey = data.LastEvaluatedKey;
            docClient.scan(params, onScan);
        }
    }
}  

使用 AWS SDK V3 进行递归 DynamoDB 扫描。

import {
  DynamoDBClient,
  ScanCommand,
  ScanCommandOutput,
  ScanCommandInput,
} from '@aws-sdk/client-dynamodb';
import { unmarshall, marshall } from '@aws-sdk/util-dynamodb';

const client = new DynamoDBClient({ region: 'eu-west-1' });

export const scanTable = async<ResultType>(params: ScanCommandInput): Promise<ResultType[]> => {
  const scanParams: ScanCommandInput = params;
  const results = [];
  let lastEvaluatedKey: string;
  do {
    console.log(`Running query: ${JSON.stringify(scanParams)}`);
    const { Items, LastEvaluatedKey } = await client.send(new ScanCommand(scanParams));
    lastEvaluatedKey = LastEvaluatedKey;
    Items.forEach((item) => results.push(unmarshall(item)));
    scanParams.ExclusiveStartKey = LastEvaluatedKey;
  } while (typeof lastEvaluatedKey !== 'undefined');

  return results as ResultType[];
};

const items = await scanTable({ TableName: 'dynamo-table' })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM