我正在尝试学习AWS DynamoDB并遇到一个看似简单的问题,我无法弄清楚。
我正在本地运行nodejs上的Dynalite。 错误如下;
{[ValidationException:必须在请求中指定KeyConditions或KeyConditionExpression参数。] message:'必须在请求中指定KeyConditions或KeyConditionExpression参数。', 代码:'ValidationException', 时间:2015年12月21日星期一17:31:47 GMT + 0200(SAST), requestId:'RHDFVDXQTI0VZUIRJSLGRZXJFQJQYWGJOGS0B4MUDSX3H3JSVWNR', statusCode:400, 可重试:false, retryDelay:0}
我的表创建如下(为简洁起见,代码被删除);
var params = {
TableName : "test",
KeySchema: [
{ AttributeName: "email", KeyType: "HASH" },
{ AttributeName: "date", KeyType: "RANGE" }
],
AttributeDefinitions: [
{ AttributeName: "email", AttributeType: "S" },
{ AttributeName: "date", AttributeType: "N" }
],
ProvisionedThroughput: {
ReadCapacityUnits: 1,
WriteCapacityUnits: 1
}
}
dynamodb.createTable(params, function(err, data) {
if (err) { console.log(JSON.stringify(err, null, 2)) }
} else { console.log(JSON.stringify(data, null, 2)) }
})
测试数据加载以下内容;
var params = {
TableName: 'test',
Item: {
"email": lowerCasedEmail,
"date": date,
"amount": amount,
}
}
dynamodbDoc.put(params, function(err, data) {
if (err){
console.log(JSON.stringify(err, null, 2))
} else {
console.log(JSON.stringify(data, null, 2))
}
})
然后失败的查询如下;
var params = {
TableName: "test",
KeyConditionExpression: "email = :testmail",
ExpressionAttributeValues: {
":testmail": "rik@test.com"
}
}
dynamodbDoc.query(params, function(err, data) {
if (err) { console.log(err) }
else {
if (Object.keys(data).length === 0) {
console.log('Nothing found.')
} else { console.log(data) }
}
})
答案 0 :(得分:2)
我发现了问题。 Dynalite无法正确处理KeyConditionExpression。