【发布时间】:2021-11-03 13:13:24
【问题描述】:
环境
所以我的 TypeScript CDK 项目中有以下 QueryInput-Object。
const params: QueryInput = {
TableName: criticalMessagesTableName,
ProjectionExpression: 'message',
KeyConditionExpression: 'myId = :myId and #ts BETWEEN :startTimestamp AND :endTimestamp',
ExpressionAttributeValues: {
':myId': { S: myId },
':startTimestamp': { N: String(startTimestamp) },
':endTimestamp': { N: String(startTimestamp + range - 1) },
},
ExpressionAttributeNames: {
'#ts': 'timestamp',
},
};
具有以下变量值:
const myId = "some-string-based-partition-key-value";
const startTimestamp = 1630927923544; //ms since epoch value
const range = 60000; // some range in ms
该表有myId 作为分区键(字符串)和timestamp 作为排序键(数字)。
问题
当使用 AWS.DynamoDB.DocumentClient 实例执行查询时,我的错误回调函数会写入以下日志:
{
"message": "Invalid KeyConditionExpression: Incorrect operand type for operator or function; operator or function: BETWEEN, operand type: M",
"code": "ValidationException",
"time": "2021-09-06T12:18:33.720Z",
"requestId": "M041V4RVD57IGRGNF7P7U15GRNVV4KQNSO5AEMVJF66Q9ASUAAJG",
"statusCode": 400,
"retryable": false,
"retryDelay": 43.99195146574429
}
我认为我的 :startTimestamp 和 :endTimestamp 以某种方式被视为地图。但是我不知道为什么。
此外,仅使用 作为解决方法也是不可能的,因为您只能在 KeyConditionExpression 中的每个键使用一个运算符。
感谢您对这个(TS 特定)文档的任何帮助。
【问题讨论】:
标签: typescript amazon-web-services amazon-dynamodb aws-cdk