0 votes
1 view
in AWS by (15.2k points)

How to fetch/scan all items from AWS DynamoDB using node.js. I am posting my code here.

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

    var params = {

    TableName:"users",

    KeyConditionExpression:"user_status=:status",

    ExpressionAttributeValues: {

        ":status": "Y"

    }

    };

    var queryExecute = function(callback) {

        docClient.query(params,function(err,result) {

            if(err) {

                console.log(err)

                callback(err);

                } else {

                console.log(result);

                if(result.LastEvaluatedKey) {

                    params.ExclusiveStartKey = result.LastEvaluatedKey;

                    queryExecute(callback);

                    } else {

                        callback(err,items);

                    }

                }

            });

        }

        queryExecute(callback); 

This is giving me below error.

ValidationException: Query condition missed key schema element: `user_id`.

Here the primary key is user_id. I don't want to use it with my query condition, because I need to set a value if I mentioned the primary key in KeyConditionExpression. Maybe I am wrong. However please suggest me a good way to fetch all items from dynamodb, which is having user_status = "Y"

1 Answer

0 votes
by (36.2k points)

You can use Scan API to get the data from a DynamoDB without using the Hash key value. But it will read all the items in the table to get results, which will consume time. But still, it is a good solution. 

This is the Code Snippet:

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);

        }

    }

}

...