【问题标题】:DynamoDB: filter and sort the same field?DynamoDB:过滤和排序相同的字段?
【发布时间】:2020-11-23 08:42:51
【问题描述】:

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

如何查询 startDate

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

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

【问题讨论】:

    标签: amazon-dynamodb dynamodb-queries amazon-dynamodb-index


    【解决方案1】:

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

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

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

    【讨论】:

    • 能否请您给我一个使用 KeyConditionExpression 来解决我的问题的示例,因为我是 dynamoDB 的新手并且不熟悉 dynamodb 查询语法(我们使用 dynamoose)
    • KeyConditionExpression 与 FilterExpression 具有相同的语法(我假设您正在使用),它只是一个单独的变量,您需要在其中列出关键属性的条件 - 而不是在 FilterExpression 中。文档在这里:docs.aws.amazon.com/amazondynamodb/latest/APIReference/…
    猜你喜欢
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 2018-09-19
    • 2020-12-07
    • 2018-09-22
    • 2021-07-11
    • 1970-01-01
    • 2014-05-17
    相关资源
    最近更新 更多