2017-10-21 98 views
0

我想通過使用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

回答

0

這表明,15個項目被掃描,沒有發現項目。您可能會在您的循環中找到該項目if (typeof data.LastEvaluatedKey != 'undefined') { params.ExclusiveStartKey = data.LastEvaluatedKey; dynamodb.scan(params, onScan); }

掃描操作掃描所有項目並過濾匹配。

相關問題