java - 如何使用 AWS Java SDK 按降序从 DynamoDb 获取项目?
问题描述
我在 AWS DynamoDB 中有一个名为 accountantHistoric 的表。它有一个主分区键 (id) 和一个主排序键 (tenant_id)。我还创建了另一个索引,称为“ExpirationDate”。该索引的排序键是“expirationDate”(字符串)属性。我想要的是:获取基于storeId的itens(该字段不是键)和基于“expirationDate”(从最新到最旧)降序排列的tenant_id。我也在做分页。
我正在尝试使用下面的代码,但它没有按降序返回。
我必须改变什么?
谢谢你们!
public AccountantEmailHistoricInfo getHistoric(String storeId, int page, int countReg, int fixedPage) {
Condition conditionStoreId = new Condition().withComparisonOperator(ComparisonOperator.EQ)
.withAttributeValueList(new AttributeValue().withS(storeId));
Condition conditionTenantId = new Condition().withComparisonOperator(ComparisonOperator.EQ)
.withAttributeValueList(new AttributeValue().withS(TenantIdentifierLocalThread.getTenantIdentifier()));
final DynamoDBScanExpression scanPageExpression = new DynamoDBScanExpression()
.withFilterConditionEntry("tenant_id", conditionTenantId)
.withFilterConditionEntry("storeId", conditionStoreId)
.withIndexName("ExpirationDate")
.withLimit(countReg);
List<AccountantEmailHistoric> accountantEmailHistoricList = new ArrayList<>();
int i = 0;
do {
ScanResultPage<AccountantEmailHistoric> scanPage = mapper.scanPage(AccountantEmailHistoric.class, scanPageExpression);
scanPageExpression.setExclusiveStartKey(scanPage.getLastEvaluatedKey());
if (i == page) {
accountantEmailHistoricList.addAll(scanPage.getResults());
}
i++;
} while (scanPageExpression.getExclusiveStartKey() != null);
final DynamoDBScanExpression scan = new DynamoDBScanExpression()
.withFilterConditionEntry("tenant_id", conditionTenantId)
.withFilterConditionEntry("storeId", conditionStoreId);
AccountantEmailHistoricInfo info = new AccountantEmailHistoricInfo(accountantEmailHistoricList);
info.setPage(fixedPage);
info.setTotalRecords(mapper.scan(AccountantEmailHistoric.class, scan).size());
return info;
}
解决方案
您需要查询,而不是扫描。然后您可以指示ScanIndexForward
设置为 false。
推荐阅读
- macos - 如何将 AAR 导入 Android Studio?
- spring - 是可用于除 java 之外的语言的 Netifi 客户端库
- r - 如何在 R 中的 mutate 命令中删除此错误?
- python - 发送到放置请求时,字典内的列表不会出现
- php - 将复选框分配给数据的最佳方法?
- reactjs - React - 自从我定义了 env.PUBLIC_URL 变量后,“npm start”就打开了公共文件夹
- kotlin - 杰克逊 - 没有为集合调用 serializeWithType
- python - 查找列最小值的索引并按列元素按数字顺序排列到列表中
- phpunit - 找不到类 PHPUnit_Testframework_TestCase
- javascript - 将 datepicker 绑定到数组内的值