Saltar al contenido

Cómo obtener/escanear todos los elementos de `AWS dynamodb` usando node.js

Después de de una extensa compilación de datos dimos con la respuesta esta duda que tienen ciertos lectores. Te compartimos la respuesta y esperamos serte de mucha apoyo.

Solución:

Si desea obtener los datos de DynamoDB sin usar Hash key valor, necesita usar Scan API.

Nota: La API de exploración lee todos los elementos de la tabla para obtener los resultados. Entonces, es una operación costosa en DynamoDB.

Enfoque alternativo: Usar GSI

Código de escaneo para el escenario anterior: –

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

Esto es trabajo para mí:

export const scanTable = async (tableName) => 
    const params = 
        TableName: tableName,
    ;

    let scanResults = [];
    let 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;

;

El ejemplo de documentación de AWS no funcionó para mí. El enfoque de @Hank funcionó.

Usando el controlador dentro de una 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);
;

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *