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), nichtclient.getItem()—DynamoDBClientstellt nursendbereit. Die aggregierteDynamoDB-Klasse aus demselben Paket hat sehr wohl einegetItem-Methode, falls du Aufrufe im SDK-v2-Stil willst — zum Preis, dass jedes Command in dein Bundle wandert.- Ein Fehltreffer ist
undefined, kein Fehler —response.Itemfehlt schlicht, und der Aufruf wird trotzdem erfolgreich aufgelöst.response.$metadatakommt immer, Truthiness auf der Antwort selbst sagt dir also nichts. unmarshallwählt den Zahlentyp nach Größenordnung — ein{N: …}innerhalb des Safe-Integer-Bereichs kommt alsnumberzurück, alles darüber hinaus alsBigInt, und eine große Nicht-Ganzzahl wirftcan't be converted to BigInt. Übergib{wrapNumbers: true}anunmarshallaus@aws-sdk/util-dynamodb, und jede Zahl kommt stattdessen alsNumberValuean — die Umwandlung entscheidest dann du.- Die
#proj-Aliasse sind tragend —Yearsteht auf AWS' Liste reservierter Wörter, eineProjectionExpression, 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). ConsumedCapacityist Opt-in — ergänzeReturnConsumedCapacity: '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 duConsistentRead: trueergänzt (die Abwägung).- Zieh den Client nach oben — konstruiere
DynamoDBClienteinmal 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
- Query vs. Scan — wann ein einzelnes
GetItemeineQueryschlägt. - Wie DynamoDB Partition Keys funktionieren — warum
GetItemden vollständigen Key braucht. - DynamoDB ResourceNotFoundException — der übliche erste Fehler hier: falscher Tabellenname oder falsche Region.
- "The provided key element does not match the schema" — der übergebene Key passt nicht zum Key-Schema der Tabelle.
Referenzen
- GetItem — Amazon DynamoDB API Reference
- GetItemCommand — AWS SDK for JavaScript v3 Reference
- Read consistency — Amazon DynamoDB Developer Guide
- Capacity unit consumption — Amazon DynamoDB Developer Guide
- @aws-sdk/lib-dynamodb — large numbers and
NumberValue
Zuletzt verifiziert am 2026-07-28 gegen die oben verlinkte offizielle AWS-Dokumentation.