Amazon dynamodb DynamoDB中排序键的条件查询不工作?

Amazon dynamodb DynamoDB中排序键的条件查询不工作?,amazon-dynamodb,aws-api-gateway,Amazon Dynamodb,Aws Api Gateway,我正在使用API网关到DynamoDB构建一个简单的API。我正在尝试对排序键执行条件查询,并不断收到消息“query key conditional not supported”。然而,我在文档中读到的所有内容都表明,这确实应该有效 我试着做一些类似的事情: { "TableName": "testTable", "KeyConditionExpression": "requestTimeEpoch > :since", "ExpressionAttributeV

我正在使用API网关到DynamoDB构建一个简单的API。我正在尝试对排序键执行条件查询,并不断收到消息“query key conditional not supported”。然而,我在文档中读到的所有内容都表明,这确实应该有效

我试着做一些类似的事情:

{
    "TableName": "testTable",
    "KeyConditionExpression": "requestTimeEpoch > :since",
    "ExpressionAttributeValues": {
        ":since": {
            #if($input.params('since') != "")
                "S": "$input.params('since')"
            #else
                "S": "1"
            #end
        }
    }
}
我在某个地方读到,有人在使用数字时遇到了这个问题,所以我尝试将其转换为字符串。不管怎样,这不管用吗


(requestTimeEpoch是哈希键的排序/范围键)

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

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

编辑:所以对于分区(散列)键,它可能类似于

{
    "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,
    }
};

好吧,那就更有意义了。我不太明白它是如何存储在内部的,即使我阅读了文档。不幸的是,这意味着我不能像我希望的那样直接从API网关使用它。我需要使用一个Lambda函数,这样我就可以使用一个日期或月份的散列键,我不能直接使用映射。。。如此接近,却又如此遥远!