2017-10-21 152 views
0

J'essaie de filtrer les données renvoyées par une opération d'analyse dynamodb en utilisant nodejs aws sdk mais les données retournées ont 0 élément.DynamoDB Scan FilterExpression retournant le résultat vide

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

J'ai essayé avec les deux FilterExpression et ScanFilter mais obtenir le même résultat.

FilterExpression:

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

ScanFilter:

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

Voici le code nodejs:

 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); 
      } 
     } 

J'ai vérifié le même état de filtre dans la console DynamoDB et d'obtenir le résultat escompté .

dynamodb console screenshot

+0

Votre code entre-t-il dans la condition 'LastEvaluatedKey! = 'Undefined''? En d'autres termes, avez-vous plus d'un appel à 'dynamodb.scan()'? Quel est le code de la fonction 'callback()'? Cela ne fonctionne pas dans une fonction Lambda, n'est-ce pas? –

+0

@MarkB Non, le code ne traite pas de plus d'un appel à dynamodb.scan() et le rappel est une application express de noeud s'exécutant sur une instance EC2. – acnn

+0

pouvez-vous essayer 'ExpressionAttributeValues: {': active': '1'}' dans les FilterExpressions – bharathp

Répondre

0

Il indique que 15 articles sont numérisés et aucun élément trouvé. Vous pouvez trouver l'élément dans votre boucle de if (typeof data.LastEvaluatedKey != 'undefined') { params.ExclusiveStartKey = data.LastEvaluatedKey; dynamodb.scan(params, onScan); }

Comme l'opération de balayage balaye tous les éléments et filtre la correspondance.