2017-06-16 74 views
3

如何獲取/使用node.jsAWS dynamodb掃描的所有項目。我在這裏發佈我的代碼。如何獲取/掃描從`AWS的所有項目dynamodb`如何使用Node.js

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獲取的所有項目,這是有user_status = "Y"

回答

3

如果您想獲得來自DynamoDB的數據,而無需使用散列鍵值,你需要使用Scan API

注意: Scan API讀取表中的所有項目以獲取結果。因此,在DynamoDB中這是一個代價高昂的操作。

另一種方法:使用 GSI

掃描代碼上述sceanario: -

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); 
     } 
    } 
} 
相關問題