AWS.DynamoDB:缺少KeyConditionExpression

时间:2016-09-26 14:51:50

标签: amazon-web-services amazon-s3 amazon-dynamodb

我想在DynamoDB中进行相当于以下SQL查询的搜索:

SELECT *
from db 
where attr="abc"

因此,我写了以下代码:

function searchFile(carModel, busMapping, from_date, until_date, location, attackTraffic, isTagged) {
    AWS.config = new AWS.Config({accessKeyId: '***', secretAccessKey: '***', region: 'us-west-2'});
    var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
    var params = {
        "TableName" : 'db',
        QueryFilter: {
            "attr": {
                ComparisonOperator: 'EQ',
                AttributeValueList: [
                    {S: 'abc'}
                ]
            }
        }
    }
    dynamodb.query(params, function(err,data) {
        if (err) {
            alert(err);
        }
    })
}

我收到了错误消息:

  

"预期的params.KeyConditionExpression是一个字符串"

我查看了AWS文档(http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#query-property)并看到必须定义params.KeyConditionExpression。但是,我仍然不明白这个密钥的内容是什么。你能提出一些可以使我的查询工作的东西吗?

1 个答案:

答案 0 :(得分:1)

要对DynamoDB执行query,您必须为其提供表的主/哈希/分区键。

  

KeyConditionExpression:条件必须对单个分区键值执行相等测试。必须使用分区键相等性测试,并且必须使用以下格式指定:partitionKeyName = :partitionkeyval

您可能希望使用scan方法,并使用ScanFilter代替QueryFilter

function searchFile(carModel, busMapping, from_date, until_date, location, attackTraffic, isTagged) {
    AWS.config = new AWS.Config({accessKeyId: '***', secretAccessKey: '***', region: 'us-west-2'});
    var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
    var params = {
        TableName : 'db',
        ScanFilter: {
            attr: {
                ComparisonOperator: 'EQ',
                AttributeValueList: [
                    {S: 'abc'}
                ]
            }
        }
    }
    dynamodb.scan(params, function(err,data) {
        if (err) {
            alert(err);
        }
    })
}