Obter todos os itens do DynamoDB em Node.js (AWS SDK v3)
Não existe "select all" no DynamoDB — ler uma tabela inteira significa um Scan que você pagina até o fim. Cada resposta carrega no máximo 1 MB; você faz o loop, alimentando LastEvaluatedKey de volta como ExclusiveStartKey, até nenhuma chave voltar.
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`);Explicação
- O loop é o ponto principal — uma única chamada
ScanNÃO retorna a tabela; ela retorna até 1 MB. Parar depois da primeira resposta é o clássico bug de "meu scan está faltando itens". Apenas umLastEvaluatedKeyausente significa que você leu tudo. - Memória —
itemsguarda a tabela inteira. Para tabelas grandes, processe cada página dentro do loop (grave em um arquivo, transmita, agregue) em vez de acumular. - Mais rápido em tabelas grandes: parallel scan — divida o trabalho com
Segment/TotalSegments: execute N workers, cada um fazendo scan do seu próprio segmento com seu próprio loop de paginação. Mesmo custo total, muito menos tempo de relógio. - Custo — um scan completo lê (e cobra) cada byte de cada item, toda vez que você o executa. Enxugue a resposta com
ProjectionExpression(menos atributos retornados — o custo de leitura permanece o mesmo), e não coloque um scan em um caminho quente; é para isso que existem o Query e o design de padrões de acesso. - Filtrando de passagem? Uma
FilterExpressiondescarta itens depois de serem lidos (e cobrados) — veja Scan com um filtro.
Faça visualmente
Dar uma olhada em uma tabela não precisa de um script: baixe o DynoTable para navegar em qualquer tabela em uma grade paginada — ele pagina os scans por você, sem loop para errar. E antes de fazer scan e pagar, a calculadora de preços do DynamoDB mostra quanto uma leitura completa da sua tabela realmente custa.
Exemplos relacionados
- Obter todos os itens em Python — a mesma leitura completa com o paginator do boto3.
- Obter todos os itens com a AWS CLI — a CLI pagina por você.
- DynamoDB Scan em Node.js — fazendo scan com uma
FilterExpression. - Parallel scans — Segment/TotalSegments, contagem de workers e quando se dar ao trabalho.
- Por que meu DynamoDB Scan é lento e caro? — o modelo de custo e como evitá-lo.
- DynamoDB ProvisionedThroughputExceededException — ler a tabela inteira é a forma clássica de esbarrar nele.
- "The provided starting key is invalid" — uma chave de retomada corrompida no loop de paginação.
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
Última verificação em 2026-07-13 contra a documentação oficial da AWS vinculada acima.