Amazon dynamodb DynamoDB中排序键的条件查询不工作?
我正在使用API网关到DynamoDB构建一个简单的API。我正在尝试对排序键执行条件查询,并不断收到消息“query key conditional not supported”。然而,我在文档中读到的所有内容都表明,这确实应该有效 我试着做一些类似的事情: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
{
"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函数,这样我就可以使用一个日期或月份的散列键,我不能直接使用映射。。。如此接近,却又如此遥远!