我正在使用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是散列键的排序/范围键)
答案 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,
}
};