在 Node.js(AWS SDK v3)中讀取 DynamoDB 所有項目

DynamoDB 沒有「select all」— 讀取整個表格意味著一個你要分頁到底的 Scan。每個回應最多帶 1 MB;你要進行迴圈,把 LastEvaluatedKey 餵回作為 ExclusiveStartKey,直到不再回傳 key。

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

說明

  • 迴圈才是重點 — 單次 Scan 呼叫並不會回傳整個表格;它最多回傳 1 MB。在第一個回應後就停下來,正是經典的「我的 scan 漏掉項目」bug。只有在缺少 LastEvaluatedKey 時,才表示你已讀完全部。
  • 記憶體items 持有整個表格。對大表格,請在迴圈內處理每一頁(寫入檔案、串流、彙整),而非一路累積。
  • 在大表格上更快:平行 scan — 以 Segment / TotalSegments 分割工作:執行 N 個 worker,每個以自己的分頁迴圈掃描自己的 segment。總成本相同,但實際耗時大幅降低。
  • 成本 — 完整 scan 每次執行都會讀取(並計費)每個項目的每個位元組。以 ProjectionExpression 精簡回應(回傳較少屬性 — 讀取成本不變),且別把 scan 放在熱路徑上;那是 Query 與存取模式設計的用武之地。
  • 順便過濾?FilterExpression 會在項目被讀取(並計費)之後丟棄它們 — 見 帶 filter 的 Scan

改用視覺化操作

單純看看一個表格,不需要指令稿:下載 DynoTable 即可在分頁的格線中瀏覽任何表格 — 它會為你翻過 scan 的分頁,沒有迴圈可寫錯。而在你 scan 並付費之前,DynamoDB 定價計算機 會顯示完整讀取一次你的表格實際花多少。

相關範例

References

最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。

以視覺化方式建構此請求

在免費的 DynamoDB 查詢建構器中組合此操作 — 鍵條件、Filter、Index、Limit、排序方向與分頁迴圈 — 再把它複製成可執行的 SDK v3、CLI 或 boto3 程式。

開啟 DynamoDB 查詢建構器

不必透過主控台就能操作 DynamoDB

DynoTable 是一款快速的 DynamoDB 桌面用戶端 — 瀏覽表格、執行 SQL 風格的查詢,並在本機編輯項目。