2017-10-21 2 views
0

Ich versuche, die Daten zu filtern, die von einer Dynamodb-Scanoperation mit nodejs aws sdk zurückgegeben werden, aber die zurückgegebenen Daten haben 0 Elemente.DynamoDB Scan FilterExpression gibt ein leeres Ergebnis zurück

Response : {"Items":[],"Count":0,"ScannedCount":15}

Ich habe versucht, mit beiden Filterexpression und ScanFilter aber das gleiche Ergebnis zu erzielen.

Filterexpression:

var params = { 
      TableName: tableName, 
      FilterExpression: 'active = :active', 
      ExpressionAttributeValues: { 
       ':active': { 
        S: '1' 
       } 
      } 
     }; 

ScanFilter:

var params = { 
      TableName: tableName, 
      ScanFilter: { 
       'active': { 
        "AttributeValueList": [{ "S": "1" }], 
        "ComparisonOperator": "EQ" 
       } 
      } 
     }; 

Hier ist der NodeJS Code:

 dynamodb.scan(params, onScan); 

     function onScan(err, data) { 
      if (err) { 
       console.error('Unable to scan the table. Error JSON:', JSON.stringify(err, null, 2)); 
      } else { 
       if (typeof data.LastEvaluatedKey != 'undefined') { 
        params.ExclusiveStartKey = data.LastEvaluatedKey; 
        dynamodb.scan(params, onScan); 
       } 
       if (data && data.Items) 
        callback(data.Items); 
       else 
        callback(null); 
      } 
     } 

ich die gleiche Filterbedingung in der DynamoDB Konsole überprüft und das erwartete Ergebnis bekommen .

dynamodb console screenshot

+0

Wird Ihr Code in den 'LastEvaluatedKey! = 'Undefined'-Zustand versetzt? Mit anderen Worten: Haben Sie mehr als einen Aufruf von 'dynamodb.scan()'? Was ist der Code für die 'Callback()' Funktion? Dies läuft nicht in einer Lambda-Funktion, oder? –

+0

@MarkB Nein, der Code behandelt nicht mehr als einen Aufruf von dynamodb.scan() und der Callback ist eine Node-Express-Anwendung, die auf einer EC2-Instanz ausgeführt wird. – acnn

+0

können Sie versuchen, ExpressionAttributeValues: {': active': '1'} 'in den FilterExpressions – bharathp

Antwort

0

Es zeigt an, dass 15 Artikel gescannt und keine Produkte gefunden. Möglicherweise finden Sie das Element in Ihrer Schleife von if (typeof data.LastEvaluatedKey != 'undefined') { params.ExclusiveStartKey = data.LastEvaluatedKey; dynamodb.scan(params, onScan); }

Als Scan-Vorgang scannt alle Elemente und filtert die Übereinstimmung.

Verwandte Themen