首页 > 解决方案 > DynamoDB:过滤和排序相同的字段?

问题描述

我有一个如下所示的本地索引表。

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

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

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

标签: amazon-dynamodbdynamodb-queriesamazon-dynamodb-index

解决方案


实际上,您不能使用FilterExpression超出范围的键 ( InvoiceDate)。但这样做的原因并不是无法做到——禁止这样做的原因是为了防止你犯下代价高昂的错误:

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

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


推荐阅读