DynamoDB GetItem in Node.js (AWS SDK v3)

AWS SDK v3 gibt dir zwei Wege, ein einzelnes Item zu lesen: GetItemCommand auf einem DynamoDBClient, der das Wire-Format spricht ({S: '...'}), oder GetCommand auf einem DynamoDBDocumentClient, der schlichtes JavaScript entgegennimmt und zurückgibt.

Das Beispiel nutzt den Low-Level-Client. Diese Wrapper sind das, wie die Attribute-Value-Kodierung auf der Leitung tatsächlich aussieht — und das, was Fehlermeldungen dir zurückzitieren. So oder so braucht die Anfrage den vollständigen Primary Key.

Code

import {DynamoDBClient, GetItemCommand} from '@aws-sdk/client-dynamodb';

const client = new DynamoDBClient({region: 'us-east-1'});

const command = new GetItemCommand({
  TableName: 'Music',
  Key: {
    Artist: {S: 'Arturo Sandoval'},
    SongTitle: {S: 'Cubano Chant'}
  },
  ProjectionExpression: '#proj0, #proj1, #proj2, #proj3',
  ExpressionAttributeNames: {
    '#proj0': 'Artist',
    '#proj1': 'SongTitle',
    '#proj2': 'AlbumTitle',
    '#proj3': 'Year'
  }
});

const response = await client.send(command);

if (!response.Item) {
  console.log('Item not found');
} else {
  console.log(response.Item);
}

Erklärung

  • send(command), nicht client.getItem()DynamoDBClient stellt nur send bereit. Die aggregierte DynamoDB-Klasse aus demselben Paket hat sehr wohl eine getItem-Methode, falls du Aufrufe im SDK-v2-Stil willst — zum Preis, dass jedes Command in dein Bundle wandert.
  • Ein Fehltreffer ist undefined, kein Fehlerresponse.Item fehlt schlicht, und der Aufruf wird trotzdem erfolgreich aufgelöst. response.$metadata kommt immer, Truthiness auf der Antwort selbst sagt dir also nichts.
  • unmarshall wählt den Zahlentyp nach Größenordnung — ein {N: …} innerhalb des Safe-Integer-Bereichs kommt als number zurück, alles darüber hinaus als BigInt, und eine große Nicht-Ganzzahl wirft can't be converted to BigInt. Übergib {wrapNumbers: true} an unmarshall aus @aws-sdk/util-dynamodb, und jede Zahl kommt stattdessen als NumberValue an — die Umwandlung entscheidest dann du.
  • Die #proj-Aliasse sind tragendYear steht auf AWS' Liste reservierter Wörter, eine ProjectionExpression, die es direkt nennt, wird also abgelehnt. Jeden Namen zu aliasen, wie oben, ist der sichere Standard. Das kürzt die Antwort, nicht die Lesekosten (warum).
  • ConsumedCapacity ist Opt-in — ergänze ReturnConsumedCapacity: 'TOTAL', und die Antwort meldet, was dieser Read tatsächlich gekostet hat: 0,5 Kapazitätseinheiten für einen letztendlich konsistenten Read eines Items unter 4 KB, 1,0 sobald du ConsistentRead: true ergänzt (die Abwägung).
  • Zieh den Client nach oben — konstruiere DynamoDBClient einmal auf Modulebene. Ihn pro Anfrage oder innerhalb eines Lambda-Handlers zu bauen, wirft bei jedem Aufruf den Connection Pool und die aufgelösten Credentials weg.

Mach es visuell

DynoTable zeigt Items als gewöhnliche Zeilen statt als Attribute-Value-Maps und exportiert die Abfrage hinter dem Grid als lauffähiges SDK-v3-Programm. DynoTable herunterladen.

Verwandte Leitfäden

Referenzen

Zuletzt verifiziert am 2026-07-28 gegen die oben verlinkte offizielle AWS-Dokumentation.

Mit DynamoDB ohne die Console arbeiten

Ein schneller DynamoDB-Desktop-Client, der das echte SQL ausführt, das DynamoDB nicht kann — JOINs, GROUP BY, Aggregationen — mit visueller Bearbeitung und einem KI-Agenten auf deinen eigenen Bedrock-Schlüsseln.

30 Tage kostenlos testen, keine Kreditkarte — danach der Kostenlos-Tarif ohne Zeitlimit.