Ich möchte einen DynamoDB Scan mit der folgenden Logik implementieren:Wie kann ich DynamoDB Limit nach dem Filtern tun?
Scanning -> Filterung (boolean true oder false) -> Die Begrenzung (für Paginierung)
Allerdings habe ich in der Lage, nur implementieren einen Scan mit dieser Logik:
Scanning -> Begrenzung (für Paginierung) -> Filter (boolean wahr oder falsch)
Wie kann ich das erreichen?
Unten ist ein Beispiel, das ich geschrieben habe, dass die zweite Scan-Logik implementiert:
var parameters = {
TableName: this.tableName,
Limit: queryStatement.limit
};
if ('role' in queryStatement) {
parameters.FilterExpression = '#role = :role';
parameters.ExpressionAttributeNames = {
'#role': 'role'
};
parameters.ExpressionAttributeValues = {
':role': queryStatement.role
};
}
if ('startKey' in queryStatement) {
parameters.ExclusiveStartKey = { id: queryStatement.startKey};
}
this.documentClient.scan(parameters, (errorResult, result) => {
if (errorResult) {
errorResult._status = 500;
return reject(errorResult);
}
return resolve(result);
});
Diese Codes wie zweite arbeitet.
Scanning -> Begrenzung -> Filterung
Oh, du meinst, es gibt keine Lösung für dieses Problem zu lösen (?) Nicht wahr? weil DynamoDB dies beabsichtigt. Ich benutze LastEvaluatedKey für die Paginierung, wie http://blabla.com/users/?limit=10&startKey= '' startKey von LastEvaluatedKey erhalten. Ich möchte 10 Daten pro HTTP-Antwort bekommen, weil ich Limit = 10 gesetzt habe, aber es kann nicht aus dem oben genannten Grund richtig? – 101110101100111111101101
Danke, für Ihre Antwort, und ich muss einen anderen Weg finden, um dies zu lösen. – 101110101100111111101101
Gut. Ja, aus dem oben genannten Grund (d. H. Zweiter Absatz letzter Satz in der Klammer). Sie müssen LastEvaluatedKey verwenden, bis Sie 10 erwartete Datensätze erhalten. Das Limit in Dynamodb funktioniert im Vergleich zu RDBMS anders. – notionquest