DynamoDB扫描FilterExpression返回空结果

DynamoDB扫描FilterExpression返回空结果

问题描述:

我想通过使用nodejs aws sdk过滤dynamodb扫描操作返回的数据,但返回的数据有0个项目。DynamoDB扫描FilterExpression返回空结果

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

我试图与这两个FilterExpression和ScanFilter,但得到了同样的结果。

FilterExpression:

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

ScanFilter:

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

这里是的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); 
      } 
     } 

我在dynamodb控制台检查相同的过滤条件并获得预期的结果。

dynamodb console screenshot

+0

你的代码进入了'LastEvaluatedKey!='undefined''状态吗?换句话说,你是否在处理'dynamodb.scan()'的多个调用? 'callback()'函数的代码是什么?这不是在Lambda函数中运行的吗? –

+0

@MarkB否,代码没有处理对dynamodb.scan()的多个调用,并且回调是在EC2实例上运行的节点快速应用程序。 – acnn

+0

你可以在FilterExpressions中尝试'ExpressionAttributeValues:{':active':'1'}' – bharathp

这表明,15个项目被扫描,没有发现项目。您可能会在您的循环中找到该项目if (typeof data.LastEvaluatedKey != 'undefined') { params.ExclusiveStartKey = data.LastEvaluatedKey; dynamodb.scan(params, onScan); }

扫描操作扫描所有项目并过滤匹配。