我想在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。但是,我仍然不明白这个密钥的内容是什么。你能提出一些可以使我的查询工作的东西吗?
答案 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);
}
})
}