我使用Lambda作为我的后端,并且即时执行所有DynamoDB操作。
我有一个用户表Users
,我想通过其哈希键Username
在我的params变量上使用KeyConditionExpression
语句,但是我收到以下错误:
有2个验证错误:\ n * MissingRequiredParameter:缺少> params中所需的键'KeyConditions'\ n * UnexpectedParameter:在params中找到意外>键'KeyConditionExpression'
所以是的,我尝试了以下遗留声明:
var userQuery = {
TableName:"Users",
KeyConditions:{
Username:{
ComparisonOperator:'EQ',
AttributeValueList:[{S:"some_username"}]
}
}
};
出于某种原因,我在查询回调中得到空错误,如下所示:
dynamo.query(userQuery,function(err,data){
if(err) console.log("error "+JSON.stringify(err,null,2));
else console.log("pass "+JSON.stringify(data,null,2));
});
我已经尝试了所有的东西,已经到了绝望的地步......
我似乎无法查询任何表,但我可以扫描并使用putItem没有问题。我的策略也有查询参数。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "my_Stmt_num",
"Action": [
"dynamodb:DeleteItem",
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:UpdateItem"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Sid": "",
"Resource": "*",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow"
}
]
}
如果它是相关的,在我的处理程序js文件的顶部我得到这样的发电机的引用:
var doc = require('dynamodb-doc');
var dynamo = new doc.DynamoDB();
我的整个申请都是'新',意味着在2015年2月之前没有任何内容存在,所以我没有看到使用遗留api的任何意义,正如文档所说。
答案 0 :(得分:1)
听起来您与文档客户端关联的AWS开发工具包可能已过期,并且不支持新的KeyConditionExpression功能。您能否尝试重新安装AWS SDK和文档SDK?如果重新安装后仍有问题,请附上正在安装的版本。
答案 1 :(得分:0)
以前的DynamoDB Document SDK已被弃用,从现在开始应使用标准Javascript SDK中的新客户端:
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html