首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用GSI键的查询之间的Dynamodb日期

不使用GSI键的查询之间的Dynamodb日期
EN

Stack Overflow用户
提问于 2022-07-25 04:45:07
回答 1查看 51关注 0票数 0

我有一个users表,其中分区键仅为ID,我在createdDate上添加了一个GSI。createdDate的格式是YYYY-MM-DD。我有两个要求,get用户只按ID & query用户按日期范围。这两个查询都是分开的。

现在,get按ID工作。当我试图按确切日期对query字段进行createdDate时,它可以工作,但是当我更改查询以添加BETWEEN子句时,它会失败,但会出现以下错误:

代码语言:javascript
复制
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
}

我的问题是:

代码语言:javascript
复制
const params = {
  TableName: "users",
  IndexName: "startDate-index",
  KeyConditionExpression: "startDate between :start AND :end",
  ExpressionAttributeValues: {
    ":start": { S: "2021-09-22" },
    ":end": { S: "2024-09-22" },
  },
};

表元:

代码语言:javascript
复制
{
  "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"
      }
    }
  ]
}
EN

回答 1

Stack Overflow用户

发布于 2022-07-25 05:05:34

使用Query,您可以指定PK值和SK范围。您正在尝试指定PK范围。您需要构造一个在SK中具有范围值的GSI。例如,将年度月作为PK.

在scale中,这并不是一个很棒的设计,因为您正在为自己创建一个热键,特别是在写上,但是对于那些将不到1000个WCU推到同一个PK上的低规模应用程序来说,这是很好的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73104157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档