如何获取/扫描从所有项目AWS dynamodb使用node.js。我在这里发布我的代码。
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"
KeyConditionExpression
dynamodb
user_status = "Y"
如果要在不使用哈希键值的情况下从DynamoDB获取数据,则需要使用Scan API。
Scan API
注意: Scan API读取表中的所有项目以获取结果。因此,这在DynamoDB中是一项昂贵的操作。
替代方法: 使用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); } } }