Получить строку карты в DynamodB - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть структура таблицы DynamodB следующим образом:

{"id": "1", "skill": {"skill1": "html", "skill2": "css"}}

У меня есть задача отфильтровать по значению навыка. Чтобы выполнить мою задачу, я написал java-логику следующим образом:

 AmazonDynamoDB client = dynamoDBService.getClient();

      DynamoDB dynamoDB = new DynamoDB(client); 
      Table table = dynamoDB.getTable("dummy");
      Map<String, String> attributeNames = new HashMap<String, String >();
      attributeNames.put("#columnValue", "skills.skill1");
      Map<String, AttributeValue> attributeValues = new HashMap<String, AttributeValue>();
      attributeValues.put(":val1", new AttributeValue().withS("html"));

      ScanSpec scanSpec = new ScanSpec().withProjectionExpression("skills.skill1")
              .withFilterExpression("#columnValue = :val1 ").withNameMap(new NameMap().with("#columnValue",  "skills.skill1")) 
                 .withValueMap(new ValueMap().withString(":val1", "html"));

      ItemCollection<ScanOutcome> items = table.scan(scanSpec);  
         Iterator<Item> iter = items.iterator(); 

         while (iter.hasNext()) {
            Item item = iter.next(); 
            System.out.println("--------"+item.toString()); 
         } 

Упомянутый код не помогает мне.Любое решение?

Ответы [ 3 ]

0 голосов
/ 29 декабря 2018

Вы можете использовать ProjectionExpression для извлечения только определенных атрибутов или элементов, а не всего элемента.ProjectionExpression может указывать атрибуты верхнего уровня или вложенные атрибуты, используя пути к документам.

, например, из AWS:

GetItemSpec spec = new GetItemSpec()
    .withPrimaryKey("Id", 206)
    .withProjectionExpression("Id, Title, RelatedItems[0], Reviews.FiveStar")
    .withConsistentRead(true);

Item item = table.getItem(spec);

System.out.println(item.toJSONPretty());
0 голосов
/ 30 декабря 2018

Я нашел решение, scanSpec должен быть следующим:

ScanSpec scanSpec = new ScanSpec()
                  .withFilterExpression("#category.#uid = :categoryuid").withNameMap(new NameMap().with("#category","skills").with("#uid",queryString)) 
                     .withValueMap(new ValueMap().withString(":categoryuid", queryString));
0 голосов
/ 29 декабря 2018

Простое решение этой проблемы:

  1. Сначала извлеките все записи из таблицы.

  2. Затем выполните итерацию по спискуобъект.

  3. Извлечение навыков из каждого объекта.

  4. Написал вашу логику для фильтрации.

  5. Повторение цикла до последней записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...