Как получить несколько значений из карты AttributeValue в запросе Java DynamodB? - PullRequest
0 голосов
/ 28 января 2019

Я хочу получить все предметы из динамо-таблицы.Я написал запрос в Java, как показано ниже, и это работает.но проблема в том, что он не добавляет все столбцы на карту AttributeValue.у него есть только первый столбец (ключ).так что я делаю здесь, поиск каждого элемента по ключу в цикле.так что это не эффективно, если ваша таблица содержит миллионы данных, когда я ищу каждый элемент в цикле.Что я могу сделать, чтобы избежать этой ситуации?примечание: имя - это первый столбец в таблице.(первичный ключ)

Я пытался получить 'count', так как мне нравилось 'name', но он ничего не возвращает за 'count', но ноль.

    Table table = dynamoDb.getTable(DYNAMODB_TABLE_NAME);

    ScanRequest scanRequest = new ScanRequest(DYNAMODB_TABLE_NAME);
    ArrayList<DeviceResponse>deviceResponses=new ArrayList<>();
    Map<String, AttributeValue> exclusiveStartKey = null;
    do {
        final ScanResult scanResult = client.scan(scanRequest);
        List<Map<String, AttributeValue>> items = scanResult.getItems();

        for (int i = 0; i < items.size(); i++) {
            Map<String, AttributeValue> map = items.get(i);

            AttributeValue value = map.get("name");
            String name = value.getS();

            Item item = table.getItem("name", name); //Searching item
            int count = item.getInt("count"); //getting count from item

            DeviceResponse deviceResponse = new DeviceResponse();
            deviceResponse.setName(name);
            deviceResponse.setCount(count);

            deviceResponses.add(deviceResponse);
        }

        exclusiveStartKey = scanResult.getLastEvaluatedKey();

        // Reusing same request object, just setting the start key
        scanRequest.setExclusiveStartKey(exclusiveStartKey);
    } while(exclusiveStartKey != null);

    return deviceResponses;

1 Ответ

0 голосов
/ 28 января 2019

Я пытался получить «количество», как я и «имя»

Нет, вы не сделали.Этот код, где вы получаете name:

AttributeValue value = map.get("name");
String name = value.getS();

не эквивалентен этому коду, где вы пытаетесь получить count:

Item item = table.getItem("name", name); //Searching item
int count = item.getInt("count"); //getting count from item

Вы принимаете поле nameи затем выполнить другой запрос к базе данных по какой-то причине.Все атрибуты находятся в объекте Map<String, AttributeValue> map.Если вы хотите получить атрибут с именем count так же, как вы получили атрибут с именем name, тогда код будет следующим:

AttributeValue value = map.get("count");
int count = value.getN();

Или просто упростите его так:

int count = map.get("count").getN();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...