DynamoDB:如何使用多个过滤器进行查询

时间:2017-06-11 11:45:34

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

我有一张桌子,结构如下: my table structure

这里correlationId是我的hashKey。

我可以使用hashKey执行简单查询:

DynamoDBMapper mapper = new DynamoDBMapper(dynamoDB);
Pickup itemRetrieved = mapper.load(Pickup.class, key);

现在我想查询字段,即correlationId,partnerId以获取transactionId。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

以下是带有多个过滤器的示例代码。

    List<Pickup> pickupList = null;

    DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(dynamoDBClient);

    Pickup pickup = new Pickup();
    pickup.setCorrelationId(correlationId);

    Map<String, AttributeValue> attributeValues = new HashMap<>();
    attributeValues.put(":partnerId", new AttributeValue(partnerId));

    DynamoDBQueryExpression<Pickup> queryExpression = new DynamoDBQueryExpression<Pickup>().withHashKeyValues(pickup)               
            .withFilterExpression("partnerId = :partnerId")
            .withExpressionAttributeValues(attributeValues);

    pickupList = dynamoDBMapper.query(Pickup.class, queryExpression);

    pickupList.stream().forEach(i -> System.out.println(i.toString()));

答案 1 :(得分:0)

您的分区键(相关ID)是您要在其上检索transactionid的一个键,但它缺少partnerid。

因此,这3个步骤 第1步 - 在partnerid上构建全局二级索引 第2步 - 过滤分区ID 第3步 - 获取交易ID

答案 2 :(得分:0)

查询过滤

DynamoDB的Query函数使用本地或全局二级索引中的主键或索引键检索项目。每个查询都可以使用布尔比较运算符来控制将返回的项目。

随着今天的发布,我们正在扩展此模型,支持对非关键属性的查询过滤。您现在可以包含QueryFilter作为对Query函数的调用的一部分。过滤器在基于密钥的检索之后和​​结果返回给您之前应用。以这种方式过滤可以减少返回到您的应用程序的数据量,同时还可以简化和简化代码。

传递给查询API的QueryFilter必须包含一个或多个条件。每个条件都引用一个属性名称,并包含一个或多个属性值以及一个比较运算符。除了通常的布尔比较运算符之外,您还可以使用CONTAINS,NOT_CONTAINS和BEGINS_WITH进行字符串匹配,使用BETWEEN进行范围检查,使用IN来检查集合中的成员资格。

除了QueryFilter之外,您还可以提供ConditionalOperator。此逻辑运算符(AND或OR)用于连接QueryFilter中的每个元素。