DynamoDB中排序键的条件查询不起作用?

时间:2017-12-07 18:33:41

标签: amazon-dynamodb aws-api-gateway

我正在使用API​​ Gateway到DynamoDB构建一个简单的API。我正在尝试对排序键执行条件查询,并且我不断收到消息"查询键条件不受支持。"但是,我在文件中读到的所有内容都说这确实有效。

我尝试做类似的事情:

{
    "TableName": "testTable",
    "KeyConditionExpression": "requestTimeEpoch > :since",
    "ExpressionAttributeValues": {
        ":since": {
            #if($input.params('since') != "")
                "S": "$input.params('since')"
            #else
                "S": "1"
            #end
        }
    }
}

我在某处读到有人在使用Number时遇到此问题,所以我尝试将其切换为String。无论哪种方式,都不应该这样做吗?

(requestTimeEpoch是散列键的排序/范围键)

1 个答案:

答案 0 :(得分:1)

您不能单独使用排序键。数据仅在其分区内排序。因此,您需要在查询中指定分区键(必须是等号运算符)。

如果您不想使用分区键,则需要切换到扫描操作。扫描不需要任何关键条件。

编辑:所以使用分区(哈希)键可能就像

{
    "TableName": "testTable",
    "KeyConditionExpression": "YourHash = :hash and requestTimeEpoch > :since",
    "ExpressionAttributeValues": {
        ":since": {
            #if($input.params('since') != "")
                "S": "$input.params('since')"
            #else
                "S": "1"
            #end
        ":hash" : {S: 'yourHashId'}
        }
    }
}

和扫描

var params = {
    TableName: "testTable",
    FilterExpression: "#since > :time",
    ExpressionAttributeNames: {
        "#since": "time",
    },
    ExpressionAttributeValues: {
         ":time": 2017,
    }
};