У меня есть таблица в AWS DynamoDB, которая называется accountantHistoric.Он имеет первичный ключ раздела (id) и первичный ключ сортировки (tenant_id).Я также создал еще один индекс под названием «ExpirationDate».Ключом сортировки этого индекса является атрибут «expirationDate» (String).То, что я хочу: получить itens на основе storeId (это поле не является ключом) и tenant_id в порядке убывания на основе «expirationDate» (от самого нового до самого старого).Я также делаю нумерацию страниц.
Я пытаюсь с кодом ниже, но он не возвращается в порядке убывания.
Что я должен изменить?
Спасибовсе!
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;
}