Как получить элементы из DynamoDb в порядке убывания с AWS Java SDK? - PullRequest
0 голосов
/ 08 июля 2019

У меня есть таблица в 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;
        }

1 Ответ

1 голос
/ 09 июля 2019

Вам нужно запросить , а не сканировать.Затем вы можете указать ScanIndexForward установленным в ложь.

...