我正在尝试在一个新项目中使用Dynamodb,我不得不说我很困惑。
所以我设置了一个带有名为ID的哈希键的新表,我将其设置为时间戳,因为它需要是唯一的。
然后我将数据插入Lambda
var tableName = "TrackerTable";
var datetime = new Date().getTime().toString();
var putData = {
"TableName": tableName,
"Item": {
"ID" : {
"N": datetime
},
"TrackIt": {
"S": event.trackit
},
"Latitude": {
"N": event.lat
},
"Longitude": {
"N": event.lon
},
"Time": {
"N": datetime
}
}
}
dynamoDB.putItem(putData, function(err, data) {
if (err) {
context.fail('ERROR: Dynamo failed: ' + err);
} else {
console.log('Dynamo Success: ' + JSON.stringify(data, null, ' '));
context.succeed('SUCCESS');
}
});
所以我的桌子开始看起来像这样很好。 所以我试图使用Lambda根据trackit列返回我的结果?
我有以下代码无效。
var tableName = "TrackerTable";
var datetime = new Date().getTime().toString();
var queryData = {
"TableName": tableName,
"ConsistentRead": true,
"KeyConditionExpression": "trackit = :val",
"ExpressionAttributeValues": {":val": {"S": "05LUGFr7494"}}
};
dynamoDB.query(queryData, function(err, data) {
if (err) {
context.fail('ERROR: Dynamo failed: ' + err);
}else{
console.log('Dynamo Success: ' + JSON.stringify(data, null, ' '));
context.done(null, data.Items);
}
});
我收到此错误。
{
"errorMessage": "ERROR: Dynamo failed: ValidationException: Query condition missed key schema element: ID"
}
如何查询所有跟踪值我无法添加ID值,因为它只会返回一个值?
很困惑。
答案 0 :(得分:1)
您设置表格的方式我认为您需要在此处进行扫描而不是查询[1]。如果这是您经常执行的操作并且希望能够执行查询,则需要将trackit属性添加为辅助索引之一。
[1] http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html