2017-10-21 8 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()'関数のコードは何ですか?これはラムダ関数では実行されていませんか? –

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

スキャン操作ではすべてのアイテムがスキャンされ、一致がフィルタリングされます。

関連する問題