AWS DynamoDb查询表

时间:2016-06-19 18:24:11

标签: node.js amazon-web-services lambda amazon-dynamodb

我正在尝试在一个新项目中使用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');
        }
    });

所以我的桌子开始看起来像这样很好。 enter image description here 所以我试图使用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值,因为它只会返回一个值?

很困惑。

1 个答案:

答案 0 :(得分:1)

您设置表格的方式我认为您需要在此处进行扫描而不是查询[1]。如果这是您经常执行的操作并且希望能够执行查询,则需要将trackit属性添加为辅助索引之一。

[1] http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html