我正在尝试读取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将扫描整个表,这既昂贵又效率低下。

10-05 21:01
查看更多