DynamoDB:过滤和排序相同的字段?

DynamoDB: filter and sort the same field?

我有一个 table,本地索引如下。

如何进行类似 startDate < InvoiceDate < endDate 的查询并按 InvoiceDateLocalIndex 降序排列结果??

据我所知,要对结果进行排序,我需要使用 InvoiceDateLocalIndex。但是,如果我使用过,则会收到错误消息“过滤器表达式只能包含非主键属性:主键属性:InvoiceDate”

"IndexName": "InvoiceDateLocalIndex",
 "KeySchema": [
  {
     "AttributeName": "FinanceYear",
     "KeyType": "HASH"
  },
  {
     "AttributeName": "InvoiceDate",
     "KeyType": "RANGE"
  }
]

确实,您不能在范围键 (InvoiceDate) 上使用 FilterExpression。但这样做的原因并不是不能这样做——之所以禁止这样做是为了防止你犯下代价高昂的错误:

要仅请求范围键的范围,您应该使用 KeyConditionExpression,而不是 FilterExpression

使用 KeyConditionExpression 更快更便宜,因为 DynamoDB 仅检索匹配的项目 - 而 FilterExpression 会读取(并向您收费)整个分区。这就是为什么“范围键”被称为“范围键”——它们允许您有效地请求这个键的范围。它们也被称为“排序键”,因为它们不只是做范围——它们实际上是排序的。