我有一个users表,其中分区键仅为ID,我在createdDate上添加了一个GSI。createdDate的格式是YYYY-MM-DD。我有两个要求,get用户只按ID & query用户按日期范围。这两个查询都是分开的。
现在,get按ID工作。当我试图按确切日期对query字段进行createdDate时,它可以工作,但是当我更改查询以添加BETWEEN子句时,它会失败,但会出现以下错误:
Error ValidationException: Query key condition not supported
at Request.extractError (/aws-dynamo-local/node_modules/aws-sdk/lib/protocol/json.js:52:27)
at Request.callListeners (/aws-dynamo-local/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
at Request.emit (/aws-dynamo-local/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (/aws-dynamo-local/node_modules/aws-sdk/lib/request.js:686:14)
at Request.transition (/aws-dynamo-local/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/aws-dynamo-local/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /aws-dynamo-local/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/aws-dynamo-local/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/aws-dynamo-local/node_modules/aws-sdk/lib/request.js:688:12)
at Request.callListeners (/aws-dynamo-local/node_modules/aws-sdk/lib/sequential_executor.js:116:18) {
code: 'ValidationException',
time: 2022-07-25T04:35:59.155Z,
requestId: '084b79e7-40a9-4012-915c-aaa073885db0',
statusCode: 400,
retryable: false,
retryDelay: 9.402842709895587
}我的问题是:
const params = {
TableName: "users",
IndexName: "startDate-index",
KeyConditionExpression: "startDate between :start AND :end",
ExpressionAttributeValues: {
":start": { S: "2021-09-22" },
":end": { S: "2024-09-22" },
},
};表元:
{
"AttributeDefinitions": [
{
"AttributeName": "id",
"AttributeType": "S"
},
{
"AttributeName": "startDate",
"AttributeType": "S"
}
],
"TableName": "bookings",
"KeySchema": [
{
"AttributeName": "id",
"KeyType": "HASH"
}
],
"GlobalSecondaryIndexes": [
{
"IndexName": "startDate-index",
"KeySchema": [
{
"AttributeName": "startDate",
"KeyType": "HASH"
}
],
"Projection": {
"ProjectionType": "ALL"
}
}
]
}发布于 2022-07-25 05:05:34
使用Query,您可以指定PK值和SK范围。您正在尝试指定PK范围。您需要构造一个在SK中具有范围值的GSI。例如,将年度月作为PK.
在scale中,这并不是一个很棒的设计,因为您正在为自己创建一个热键,特别是在写上,但是对于那些将不到1000个WCU推到同一个PK上的低规模应用程序来说,这是很好的。
https://stackoverflow.com/questions/73104157
复制相似问题