2016-10-27 10 views
1

ich eine Liste von Menschen, die alle das Feld cityName haben:Conditional Paginierung DynamoDB mit scannen

Person { 
    id: ... 
    name: ... 
    cityName: ... 
} 

Ich möchte Paginieren Sie durch die Liste mit den DynamoDB Operatoren Limit und ExclusiveStartKey. Das funktioniert ganz gut, aber ich laufe in Schwierigkeiten, wenn ich will den Benutzern aus, fx Paginieren kommen, ‚London‘

cityName: 'London'

Ich habe versucht, die folgenden hinzuzufügen:

FilterExpression: 'cityName = :x', 
ExpressionAttributeValues: { 
    ':x': 'London' 
} 

Aber diese entfernt einfach die nicht übereinstimmenden Menschen nach der Scan abgeschlossen hat. Ich möchte filtern, bevor der Scan auftritt.

Gibt es eine Möglichkeit für mich, dies zu erreichen?

+0

Durch Design wird der Filter nach dem Scan angewendet und es nicht von API zur Zeit gesteuert werden kann. Sie können die Verwendung von GSI in Betracht ziehen. – notionquest

Antwort

0

Ich fand heraus, dass die query Methode das richtige für den Ansatz ist. Alle scan Filterung erfolgt nach das Holen von der Datenbank und würde deshalb nie arbeiten.

Ich hoffe, das andere helfen können:

const cityName = 'London' 

const params = { 
    TableName: 'Person', 
    Limit: 5, 
    IndexName: 'cityName-index', 
    KeyConditionExpression: 'cityName = :x', 
    ExpressionAttributeValues: { 
    ':x': cityName 
    } 
} 

// For pagination add the "ExclusiveStartKey" key to params