我正在尝试读取DynamoDB表中高于某个值的所有值。我将主分区键设置为一个称为Project_ID的数字。
我正在运行查询以查看特定ID之上的所有值-主要是为了测试功能,但是运行代码时出现错误。
代码:
var params = {
TableName : document.getElementById("tableName").value,
KeyConditionExpression: "Project_ID > :v1",
"ExpressionAttributeValues": {
":v1": {"N": "0"}
}
};
docClient.query(params, function(err, data) {
if (err) {
document.getElementById('textarea').innerHTML += "Unable to query. Error: " + "\n" + JSON.stringify(err, undefined, 2);
} else {
data.Items.forEach(function(project) {
//JSON.stringify(project);
document.getElementById('textarea').innerHTML += "\n" + project.Project_Name + ": " + project.Project_Ref;
});
}
});
输出
`Unable to query. Error: {
"message": "Invalid KeyConditionExpression: Incorrect operand type for operator or function; operator or function: >, operand type: M",
"code": "ValidationException",
"time": "2017-04-28T10:52:31.381Z",`
最佳答案
在Query API的KeyConditionExpression中,分区键只能具有相等运算符。排序键可以有多个运算符。
条件必须对单个分区键执行相等性测试
值。该条件还可以执行多个比较测试之一
在单个排序键值上。
示例(排序键):-
sortKeyName :sortkeyval。
sortKeyName 或等于:sortkeyval。
如果您要基于某些条件获取多个项目,则可能需要使用Scan(带有FilterExpression)或BatchGetItem API。
注意:-
扫描API将扫描整个表,这既昂贵又效率低下。