我使用此方法从dynamodb获取数据。但我如何应用过滤器或(Where子句通过名称和地址获取数据)
公共类CustomerDAO扩展AbstractDAO实现DynamodbDAO {
@Override
public Class<Customer> getClazz() {
return Customer.class;
}
public List<Customer> getByUserId(String userId) {
return getDynamoDB().scan(
getClazz(),
new DynamoDBScanExpression().withFilterExpression(
"USER_ID = :userId")
.addExpressionAttributeValuesEntry(":userId",
new AttributeValue().withS(userId)));
}
}
}
答案 0 :(得分:0)
您需要在扫描中应用FilterExpression。使用此表达式,您可以将过滤逻辑应用于每个项目的任何属性,进一步描述here。这个过滤由DynamoDB在服务器端应用,因此只有匹配的结果将返回给您,但您仍然“支付”读取数据所需的读取IO。
在相关问题上,通常应避免扫描DynamoDB表。它需要读取表中的每个项目,除非您的表非常小,否则会产生大量的读取IO,并且需要很长时间才能返回。您应该尝试使用哈希或范围键来完成查询,该键允许您直接获取所需的数据。如果这不适用于表的主哈希/范围键,您应该考虑创建全局二级索引以允许您直接访问所需的数据。