How to fetch/scan all items from `AWS dynamodb` using node.js How to fetch/scan all items from `AWS dynamodb` using node.js node.js node.js

How to fetch/scan all items from `AWS dynamodb` using node.js


This is working for me:

export const scanTable = async (tableName) => {    const params = {        TableName: tableName,    };    const scanResults = [];    const items;    do{        items =  await documentClient.scan(params).promise();        items.Items.forEach((item) => scanResults.push(item));        params.ExclusiveStartKey  = items.LastEvaluatedKey;    }while(typeof items.LastEvaluatedKey !== "undefined");        return scanResults;};


If you would like to get the data from DynamoDB without using Hash key value, you need to use Scan API.

Note: The Scan API reads all the items in the table to get the results. So, it is a costly operation in DynamoDB.

Alternate Approach : Use GSI

Scan Code for the above sceanario:-

var docClient = new AWS.DynamoDB.DocumentClient();var params = {    TableName: "users",    FilterExpression: "#user_status = :user_status_val",    ExpressionAttributeNames: {        "#user_status": "user_status",    },    ExpressionAttributeValues: { ":user_status_val": 'somestatus' }};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 {                console.log("Scan succeeded.");        data.Items.forEach(function(itemdata) {           console.log("Item :", ++count,JSON.stringify(itemdata));        });        // continue scanning if we have more items        if (typeof data.LastEvaluatedKey != "undefined") {            console.log("Scanning for more...");            params.ExclusiveStartKey = data.LastEvaluatedKey;            docClient.scan(params, onScan);        }    }}


AWS documentation example didn't work for me. @Hank approach did the trick.

Using handler inside a lambda:

const AWS = require('aws-sdk');const docClient = new AWS.DynamoDB.DocumentClient({    // optional tuning - 50% faster(cold) / 20% faster(hot)    apiVersion: '2012-08-10',    sslEnabled: false,    paramValidation: false,    convertResponseTypes: false});const tableName = 'series';exports.handler = async (event, context, callback) => {    let params = { TableName: tableName };    let scanResults = [];    let items;    do {        items = await docClient.scan(params).promise();        items.Items.forEach((item) => scanResults.push(item));        params.ExclusiveStartKey = items.LastEvaluatedKey;    } while (typeof items.LastEvaluatedKey != "undefined");    callback(null, scanResults);};