带有DynamoDBScanExpression的AWS ProjectionExpression

时间:2018-12-15 09:01:14

标签: java amazon-web-services amazon-dynamodb

我有一个17列的dynamodb表(名为Student)。在此表中,我有诸如student_id,name,age ...的列。我想让年龄大于18岁的学生学习。此代码段给出了List<Student>。但是我只想要List<String>,即仅包含student_id的列表。

DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
    scanExpression.addFilterCondition("age", new Condition()
                                                .withComparisonOperator(ComparisonOperator.GT)
                                                .withAttributeValueList(new AttributeValue().withN(age)));

我尝试过:scanExpression.setProjectionExpression("student_id");

但是会引发错误。所以我在这里做什么错。 并且是否可以通过DynamoDBQueryExpression来完成此任务 另外,如果我要多个选择性列,建议使用相同的方法

1 个答案:

答案 0 :(得分:0)

您的代码示例不足以让我了解如何执行扫描表达式。是否使用DynamoDBMapper,如果是,则扫描结果始终返回表所映射到的类的对象列表。提供投影表达式将仅限制返回的属性(请参阅this)。返回扫描结果后,您仍然必须将student_id提取到列表中。

List<Student> result = mapper.scan(Student.class, scanExpression);
List<String> studentIds = result
            .stream()
            .map(student -> student.getStudentId())
            .collect(Collectors.toList());

有关查询和扫描的更多示例,请参见this AWS Documentation