Obtener todos los Items de DynamoDB en Node.js (SDK de AWS v3)

Leer una tabla entera en el SDK v3 significa paginar un Scan hasta el final. Cada respuesta tiene un tope de 1 MB, y devuelves LastEvaluatedKey como ExclusiveStartKey hasta que deja de llegar (cómo funcionan los cursores de DynamoDB).

El bucle de abajo está escrito a mano para que el cursor quede a la vista. En código real recurrirías a paginateScan, que el SDK ya incluye.

Código

import {DynamoDBClient, ScanCommand} from '@aws-sdk/client-dynamodb';

const client = new DynamoDBClient({region: 'us-east-1'});

const items = [];
let lastEvaluatedKey;

do {
  const response = await client.send(
    new ScanCommand({
      TableName: 'Music',
      ExclusiveStartKey: lastEvaluatedKey
    })
  );

  items.push(...(response.Items ?? []));
  lastEvaluatedKey = response.LastEvaluatedKey;
} while (lastEvaluatedKey);

console.log(`Table holds ${items.length} items`);

Explicación

  • paginateScan ya hace estoimport {paginateScan} from '@aws-sdk/client-dynamodb', y luego for await (const page of paginateScan({client}, {TableName: 'Music'})). Se genera a partir de los mismos tres campos de cursor que el bucle de arriba usa a mano (ExclusiveStartKey, LastEvaluatedKey, Limit), así que nada cambia de comportamiento cuando te pasas a él.
  • Solo un LastEvaluatedKey ausente significa que has terminado — una respuesta con cero Items y un cursor es normal, no una tabla vacía. Cortar con Items.length === 0 es el clásico bug de filas que faltan, y una FilterExpression hace que las páginas vacías sean rutina en vez de rareza.
  • Limit cuenta Items evaluados por llamada, no Items en total — es el tercer campo que maneja el paginador, y ni él ni el pageSize del paginador acotan el tamaño del array que acabas reteniendo.
  • ExclusiveStartKey: undefined en la primera pasada está bien — el serializador descarta los miembros undefined, así que la primera iteración no necesita ningún caso especial.
  • items crece hasta el tamaño de la tabla — procesa cada página dentro del bucle y suéltala (escribe, transmite, agrega) salvo que sepas que la tabla es pequeña. Acumular está a un crecimiento de tabla de un fallo por falta de memoria.
  • Un scan factura cada byte que lee, en cada ejecuciónProjectionExpression reduce lo que cruza la red pero no la factura (por qué), y una FilterExpression descarta Items después de leerlos y cobrarlos (Scan con un filtro). En un camino caliente lo que quieres es un Query.
  • Divídelo con Segment / TotalSegments — N workers asíncronos, cada uno manejando su propio cursor sobre su propia porción, todos sobre un cliente compartido. Node los ejecutará concurrentemente sin problema; el coste de lectura no cambia, solo el tiempo de reloj (cuándo merece la pena).

Hazlo visualmente

El generador de consultas de DynamoDB genera este programa entero, bucle de paginación incluido, desde un formulario, en el SDK v3 y otros siete destinos.

DynoTable pagina por ti una tabla en vivo en una cuadrícula de scroll infinito, y exporta el Scan que hay detrás de esa cuadrícula como código ejecutable. Descarga DynoTable.

Ejemplos relacionados

Referencias

Verificado por última vez el 2026-07-28 contra la documentación oficial de AWS enlazada arriba.

Construye esta solicitud visualmente

Compón esta operación en el Generador de consultas de DynamoDB gratuito —condición de clave, filtro, índice, Limit, orden de clasificación y un bucle de paginación— y cópiala de vuelta como un programa ejecutable para SDK v3, CLI o boto3.

Abrir el Generador de consultas de DynamoDB

Trabaja con DynamoDB sin la Consola

Un cliente de escritorio rápido para DynamoDB que ejecuta el SQL real que DynamoDB no puede — JOINs, GROUP BY, agregaciones — con edición visual y un agente de IA con tus propias claves de Bedrock.

Prueba gratuita de 30 días, sin tarjeta — después, el plan Free sin límite de tiempo.