DynamoDB GSI in Node.js (AWS SDK v3) abfragen

Einen globalen Sekundärindex abzufragen ist ein normales Query plus einem Parameter: IndexName. Die Schlüsselbedingung zielt dann auf die Schlüssel des Index, nicht der Tabelle — hier lässt uns AlbumTitle-index Songs nach Album abrufen, ein Zugriffsmuster, das die Basistabelle (Artist + SongTitle) ohne einen Scan nicht bedienen kann.

Code

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

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

const items = [];
let lastEvaluatedKey;

do {
  const response = await client.send(
    new QueryCommand({
      TableName: 'Music',
      IndexName: 'AlbumTitle-index',
      KeyConditionExpression: '#hashKey = :hashKeyValue',
      ExpressionAttributeNames: {
        '#hashKey': 'AlbumTitle'
      },
      ExpressionAttributeValues: {
        ':hashKeyValue': {S: 'Danzon'}
      },
      ExclusiveStartKey: lastEvaluatedKey
    })
  );

  items.push(...(response.Items ?? []));
  lastEvaluatedKey = response.LastEvaluatedKey;
} while (lastEvaluatedKey);

console.log(`Found ${items.length} songs on the album`);

Erklärung

  • IndexName — benennt den abzufragenden GSI (TableName ist weiterhin erforderlich). Die KeyConditionExpression nutzt den Partitions- (und optionalen Sortier-)Schlüssel des Index — hier AlbumTitle — mit denselben Operatoren wie eine Tabellenabfrage.
  • Nur letztendliche Konsistenz — GSIs replizieren asynchron von der Basistabelle. ConsistentRead: true bei einer GSI-Abfrage zu übergeben wertet sie nicht auf; sie schlägt mit einer ValidationException fehl. (Local Secondary Indexes unterstützen starke Konsistenz.)
  • Du bekommst nur projizierte Attribute — eine GSI-Abfrage gibt zurück, was der Index projiziert (ALL, KEYS_ONLY oder die per INCLUDE gelisteten Attribute) und kann den Rest nicht aus der Basistabelle holen. Brauchst du ein nicht projiziertes Attribut? Setze mit GetItem auf dem Tabellenschlüssel nach, oder erweitere die Projektion.
  • Schlüssel sind in einem GSI nicht eindeutig — viele Items können denselben Indexschlüssel teilen, und Items, denen das Indexschlüssel-Attribut fehlt, erscheinen einfach nicht (das ist das Sparse-Index-Muster).
  • Pagination — identisch zu einer Tabellenabfrage: höchstens 1 MB pro Seite, schleife LastEvaluatedKeyExclusiveStartKey, bis er undefined ist.

Visuell erledigen

Der DynamoDB Expression Builder baut die Schlüsselbedingung + Name-/Wert-Maps für Index-Abfragen und kopiert den Code.

Um die Indizes einer Tabelle zu durchsuchen und GSI-Abfragen aus einem Formular auszuführen — paginiertes Raster, kopiere den generierten SDK-v3-Code — lade DynoTable herunter.

Verwandte Beispiele

References

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

Diesen Request visuell bauen

Stelle diese Operation im kostenlosen DynamoDB Query Builder zusammen — Key-Bedingung, Filter, Index, Limit, Sortierreihenfolge und eine Paginierungsschleife — und kopiere sie als lauffähiges SDK-v3-, CLI- oder boto3-Programm zurück.

DynamoDB Query Builder öffnen

Mit DynamoDB ohne die Console arbeiten

DynoTable ist ein schneller Desktop-Client für DynamoDB — durchsuche Tabellen, führe SQL-artige Queries aus und bearbeite Items lokal.