Ambil Semua Item dari DynamoDB di Node.js (AWS SDK v3)

Membaca seluruh tabel di SDK v3 berarti melakukan paginasi sebuah Scan sampai habis. Setiap respons dibatasi 1 MB, dan Anda mengumpankan LastEvaluatedKey kembali sebagai ExclusiveStartKey sampai salah satunya berhenti datang (cara kerja cursor DynamoDB).

Loop di bawah ditulis dengan tangan supaya cursor-nya terlihat. Di kode sungguhan Anda akan memakai paginateScan, yang sudah disertakan SDK.

Kode

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

Penjelasan

  • paginateScan sudah melakukan iniimport {paginateScan} from '@aws-sdk/client-dynamodb', lalu for await (const page of paginateScan({client}, {TableName: 'Music'})). Ia dihasilkan dari tiga field cursor yang sama yang dipakai loop di atas secara manual (ExclusiveStartKey, LastEvaluatedKey, Limit), jadi tak ada perilaku yang berubah saat Anda beralih.
  • Hanya LastEvaluatedKey yang tidak ada yang berarti selesai — respons dengan nol Items dan sebuah cursor itu normal, bukan tabel kosong. Berhenti pada Items.length === 0 adalah bug baris-hilang klasik, dan sebuah FilterExpression membuat halaman kosong jadi rutin alih-alih langka.
  • Limit menghitung item yang dievaluasi per panggilan, bukan total item — ia adalah field ketiga yang dikendalikan paginator, dan baik ia maupun pageSize milik paginator tidak membatasi ukuran array yang akhirnya Anda pegang.
  • ExclusiveStartKey: undefined pada iterasi pertama tidak masalah — serializer membuang member yang undefined, jadi iterasi pertama tak butuh perlakuan khusus.
  • items tumbuh sebesar tabelnya — proses setiap halaman di dalam loop lalu lepaskan (tulis, stream, agregasi) kecuali Anda tahu tabelnya kecil. Menumpuknya hanya berjarak satu pertumbuhan tabel dari crash kehabisan memori.
  • Sebuah scan menagih setiap byte yang dibacanya, pada setiap kali jalanProjectionExpression mengecilkan apa yang melintasi jaringan dan bukan tagihannya (mengapa), dan sebuah FilterExpression membuang item setelah item itu dibaca dan ditagih (Scan dengan filter). Di jalur panas, yang Anda inginkan adalah Query.
  • Pecah dengan Segment / TotalSegments — N worker async, masing-masing mengendalikan cursor-nya sendiri atas irisannya sendiri, semuanya pada satu client bersama. Node akan senang menjalankannya secara bersamaan; biaya bacanya tidak berubah, hanya waktu dindingnya (kapan itu sepadan).

Lakukan secara visual

Query builder DynamoDB menghasilkan seluruh program ini, termasuk loop paginasinya, dari sebuah formulir, dalam SDK v3 dan tujuh target lainnya.

DynoTable melakukan paginasi tabel live untuk Anda dalam grid yang bisa di-scroll tanpa batas, dan mengekspor Scan di balik grid itu sebagai kode yang siap dijalankan. Unduh DynoTable.

Contoh terkait

Referensi

Terakhir diverifikasi 2026-07-28 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bangun request ini secara visual

Susun operasi ini di DynamoDB Query Builder gratis — key condition, filter, index, Limit, urutan sortir, dan loop paginasi — lalu salin kembali sebagai program SDK v3, CLI, atau boto3 yang bisa dijalankan.

Buka DynamoDB Query Builder

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.