DynamoDB запрос на GSI, чтобы найти последний элемент

Я пытаюсь выполнить запрос на DynamoDB, чтобы предоставить мне последний элемент на основе xField в XField Index

DyanmoDB pojo

   @EqualsAndHashCode(exclude = "rvn")
    @DynamoDBTable(tableName = "Test")
    public class Test {

    @DynamoDBHashKey(attributeName = "uniqueId")
    @DynamoDBAutoGeneratedKey
    private String uniqueId;

    @DynamoDBIndexHashKey(globalSecondaryIndexName = "xField-index", attributeName = "xField")
    private String xField;

    @DynamoDBAutoGeneratedTimestamp(strategy = DynamoDBAutoGenerateStrategy.CREATE)
    @DynamoDBAttribute(attributeName = "createdAt")
    private Date createdAt;

    @DynamoDBAutoGeneratedTimestamp(strategy = DynamoDBAutoGenerateStrategy.ALWAYS)
    @DynamoDBRangeKey(attributeName = "lastUpdatedAt")
    private Long lastUpdatedAt;

    @DynamoDBVersionAttribute(attributeName = "rvn")
    private Long rvn;

    }

Ключ Hash таблицы генерируется автоматически с помощью аннотации @DynamoDBAutoGeneratedKey. Я искал в Интернете и обнаружил, что могу использовать withScanIndexForward, но когда я глубоко погружаюсь, я узнаю, как работает withScanIndexForward:

Элементы с одинаковым значением ключа раздела хранятся в отсортированном порядке по ключу сортировки. Если тип данных ключа сортировки - Число, результаты сохраняются в числовом порядке. Для типа String результаты сохраняются в порядке байтов UTF-8. Для типа Binary DynamoDB обрабатывает каждый байт двоичных данных как беззнаковый.

Если ScanIndexForward имеет значение true, DynamoDB возвращает результаты в порядке их сохранения (по значению ключа сортировки). Это поведение по умолчанию. Если ScanIndexForward имеет значение false, DynamoDB считывает результаты в обратном порядке по значению ключа сортировки, а затем возвращает результаты клиенту.

В моем случае ключа сортировки нет. Итак, я получаю случайные данные, когда я запускаю нижеупомянутый запрос.

  final Map<String, String> attributeNameMap = new HashMap<>();
        attributeNameMap.put("#t", "XField");
     final Map<String, AttributeValue> attributeValueMap = new HashMap<>();
        attributeValueMap.put(":v1", new AttributeValue().withS(value));

     DynamoDBQueryExpression<SkillOperationData> expression = new 
         DynamoDBQueryExpression<Test>()
                .withIndexName("XField-index")
                .withConsistentRead(false)
                .withKeyConditionExpression("#t = :v1")
                .withScanIndexForward(false)
                .withLimit(1);

Может кто-нибудь помочь мне найти способ решить эту проблему.

0 ответов

Другие вопросы по тегам