amazon-dynamodb - DynamoDB:过滤和排序相同的字段?
问题描述
我有一个如下所示的本地索引表。
如何进行类似 startDate < InvoiceDate < endDate 的查询并按 InvoiceDateLocalIndex 降序对结果进行排序?
据我所知,要对我需要使用 InvoiceDateLocalIndex 的结果进行排序。但如果我使用过,我会收到错误“过滤器表达式只能包含非主键属性:主键属性:InvoiceDate”
"IndexName": "InvoiceDateLocalIndex",
"KeySchema": [
{
"AttributeName": "FinanceYear",
"KeyType": "HASH"
},
{
"AttributeName": "InvoiceDate",
"KeyType": "RANGE"
}
]
解决方案
实际上,您不能使用FilterExpression
超出范围的键 ( InvoiceDate
)。但这样做的原因并不是无法做到——禁止这样做的原因是为了防止你犯下代价高昂的错误:
要仅请求范围键的范围,您应该使用KeyConditionExpression
,而不是FilterExpression
。
使用KeyConditionExpression
更快更便宜,因为 DynamoDB 只检索匹配的项目 - 而FilterExpression
会读取(并向您收费)整个分区。这就是“范围键”被称为“范围键”的原因——它们允许您有效地请求该键的范围。它们也被称为“排序键”,因为它们不只是做范围——它们实际上是排序的。
推荐阅读
- matlab - 如何加快在服务器上的 VM 上运行非常缓慢的 Matlab 矩阵乘法?
- javascript - 希望 react-hamburger-menu 图标位于与汉堡包图标具有相同行为的容器中
- mysql - Mysql在安装过程中不会启动服务器
- angular - 注入服务时无法解析组件的所有参数
- node.js - 未加载样式表,即使已配置静态
- python - vtkXMLPolyData Writer/Reader 不可逆
- java - 调用 Oracle 存储过程抛出原因:java.sql.SQLException:无效的列类型:1111
- google-cloud-platform - 从 Pub/Sub 订阅中提取的 Google Cloud Function 引发异常 - 已超过截止日期
- javascript - React - 如何从 JSON 文件呈现内容?
- python-3.x - ML 模型中的虚拟变量问题(python 3)