Obtener todos los items de DynamoDB en Node.js (AWS SDK v3)
En DynamoDB no existe un "select all" — leer una tabla entera significa un Scan que paginas hasta el final. Cada respuesta lleva como máximo 1 MB; iteras, volviendo a alimentar LastEvaluatedKey como ExclusiveStartKey, hasta que no vuelve ninguna clave.
Code
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
- El bucle es lo importante — una única llamada a
ScanNO devuelve la tabla; devuelve hasta 1 MB. Pararse tras la primera respuesta es el clásico bug de "a mi scan le faltan items". Solo unLastEvaluatedKeyausente significa que lo has leído todo. - Memoria —
itemscontiene la tabla entera. Para tablas grandes, procesa cada página dentro del bucle (escribir a un archivo, hacer streaming, agregar) en lugar de acumular. - Más rápido en tablas grandes: scan en paralelo — reparte el trabajo con
Segment/TotalSegments: ejecuta N workers, cada uno escaneando su propio segmento con su propio bucle de paginación. El mismo coste total, mucho menos tiempo de reloj. - Coste — un scan completo lee (y factura) cada byte de cada item, cada vez que lo ejecutas. Recorta la respuesta con
ProjectionExpression(menos atributos devueltos — el coste de lectura se mantiene igual), y no pongas un scan en una ruta caliente; para eso están Query y el diseño de patrones de acceso. - ¿Filtrando de paso? Un
FilterExpressiondescarta items después de leerlos (y facturarlos) — consulta Scan con un filtro.
Hazlo visualmente
Echar un vistazo a una tabla no necesita un script: descarga DynoTable para explorar cualquier tabla en una cuadrícula paginada — pagina los scans por ti, sin un bucle que equivocar. Y antes de escanear y pagar, la calculadora de precios de DynamoDB muestra lo que realmente cuesta una lectura completa de tu tabla.
Ejemplos relacionados
- Obtener todos los items en Python — la misma lectura completa con el paginador de boto3.
- Obtener todos los items con la AWS CLI — la CLI pagina por ti.
- DynamoDB Scan en Node.js — escanear con un
FilterExpression. - Scans en paralelo — Segment/TotalSegments, número de workers y cuándo vale la pena.
- ¿Por qué mi DynamoDB Scan es lento y caro? — el modelo de costes y cómo evitarlo.
- DynamoDB ProvisionedThroughputExceededException — leer la tabla entera es la forma clásica de provocarlo.
- "The provided starting key is invalid" — una clave de reanudación deformada en el bucle de paginación.
References
- Scan — Amazon DynamoDB API Reference
- Scanning tables in DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.