Obtenir tous les éléments de DynamoDB en Node.js (AWS SDK v3)
Il n'y a pas de « select all » dans DynamoDB — lire une table entière signifie un Scan que tu pagines jusqu'au bout. Chaque réponse porte au plus 1 Mo ; tu boucles, en réinjectant LastEvaluatedKey comme ExclusiveStartKey, jusqu'à ce qu'aucune clé ne revienne.
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`);Explication
- La boucle est l'essentiel — un seul appel
Scanne renvoie PAS la table ; il renvoie jusqu'à 1 Mo. S'arrêter après la première réponse est le bug classique « mon scan a des éléments manquants ». Seule une absence deLastEvaluatedKeysignifie que tu as tout lu. - Mémoire —
itemscontient la table entière. Pour les grandes tables, traite chaque page à l'intérieur de la boucle (écrire dans un fichier, streamer, agréger) au lieu d'accumuler. - Plus rapide sur les grandes tables : scan parallèle — répartis le travail avec
Segment/TotalSegments: lance N workers, chacun scannant son propre segment avec sa propre boucle de pagination. Même coût total, temps réel bien plus court. - Coût — un scan complet lit (et facture) chaque octet de chaque élément, à chaque exécution. Réduis la réponse avec
ProjectionExpression(moins d'attributs renvoyés — le coût de lecture reste le même), et ne mets pas un scan sur un chemin critique ; c'est à ça que servent Query et la conception des schémas d'accès. - Tu en profites pour filtrer ? Une
FilterExpressionécarte les éléments après leur lecture (et facturation) — voir Scan avec un filtre.
À faire visuellement
Jeter un œil à une table ne nécessite pas de script : télécharge DynoTable pour parcourir n'importe quelle table dans une grille paginée — il pagine les scans pour toi, aucune boucle à rater. Et avant de scanner-et-payer, le calculateur de tarification DynamoDB montre ce que coûte réellement une lecture complète de ta table.
Exemples liés
- Obtenir tous les éléments en Python — la même lecture complète avec le paginateur de boto3.
- Obtenir tous les éléments avec l'AWS CLI — la CLI pagine pour toi.
- DynamoDB Scan en Node.js — scanner avec une
FilterExpression. - Scans parallèles — Segment/TotalSegments, nombre de workers, et quand s'en soucier.
- Pourquoi mon Scan DynamoDB est-il lent et coûteux ? — le modèle de coût et comment l'éviter.
- DynamoDB ProvisionedThroughputExceededException — lire la table entière est la façon classique de l'atteindre.
- "The provided starting key is invalid" — une clé de reprise malformée dans la boucle de pagination.
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
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.