2017-06-16 23 views
3

AWS dynamodbからすべてのアイテムを取得/スキャンする方法はnode.jsです。私はここに私のコードを掲載しています。node.jsを使用して `AWS dynamodb`からすべてのアイテムを取得/スキャンする方法

var docClient = new aws.DynamoDB.DocumentClient(); 
    var params = { 
    TableName:"users", 
    KeyConditionExpression:"user_status=:status", 
    ExpressionAttributeValues: { 
     ":status": "Y" 
    } 
    }; 

    var queryExecute = function(callback) { 
     docClient.query(params,function(err,result) { 
      if(err) { 
       console.log(err) 
       callback(err); 
       } else { 
       console.log(result); 

       if(result.LastEvaluatedKey) { 
        params.ExclusiveStartKey = result.LastEvaluatedKey; 
        queryExecute(callback); 
        } else { 
         callback(err,items); 
        } 
       } 
      }); 
     } 
     queryExecute(callback); 

これは私に以下のエラーを与えています。

ValidationException: Query condition missed key schema element: `user_id`. 

ここで、主キーはuser_idです。私はKeyConditionExpressionのプライマリキーに言及した場合、値を設定する必要があるので、私はクエリ条件でそれを使用したくありません。私は間違っているかもしれません。しかし、あなたはハッシュキーの値を使用せずに、DynamoDBのからデータを取得したい場合、あなたはScan APIを使用する必要がuser_status = "Y"

答えて

3

を持つされ、私dynamodbからすべてのアイテムを取得するための良い方法を提案してください。

注:スキャンAPIは、テーブル内のすべての項目を読み取り、結果を取得します。したがって、DynamoDBではコストのかかる操作です。

別の方法:上記sceanarioため使用GSI

スキャンコード: -

var docClient = new AWS.DynamoDB.DocumentClient(); 

var params = { 
    TableName: "users", 
    FilterExpression: "#user_status = :user_status_val", 
    ExpressionAttributeNames: { 
     "#user_status": "user_status", 
    }, 
    ExpressionAttributeValues: { ":user_status_val": 'somestatus' } 

}; 

docClient.scan(params, onScan); 
var count = 0; 

function onScan(err, data) { 
    if (err) { 
     console.error("Unable to scan the table. Error JSON:", JSON.stringify(err, null, 2)); 
    } else {   
     console.log("Scan succeeded."); 
     data.Items.forEach(function(itemdata) { 
      console.log("Item :", ++count,JSON.stringify(itemdata)); 
     }); 

     // continue scanning if we have more items 
     if (typeof data.LastEvaluatedKey != "undefined") { 
      console.log("Scanning for more..."); 
      params.ExclusiveStartKey = data.LastEvaluatedKey; 
      docClient.scan(params, onScan); 
     } 
    } 
} 
関連する問題