【问题标题】:Query in DynamoDB using Java API使用 Java API 在 DynamoDB 中查询
【发布时间】:2015-07-27 15:31:21
【问题描述】:

我需要在 DynamoDB 上实现查询操作。现在我通过给出 HashKey 然后根据我对非关键属性的条件过滤掉结果来做到这一点。

这就是我正在做的:

MusicData hashKey = new MusicData();
hashKey.setID(singer); 

DynamoDBQueryExpression<MusicData> queryExpression = new DynamoDBQueryExpression<MusicData>().withHashKeyValues(hashKey);

List<MusicData> queryResult = mapper.query(MusicData.class, queryExpression);

for (MusicData musicData : queryResult) {
    if( my condtions ) {
        do something;   
    }
}

我想做的是能够做这样的事情:

MusicData hashKey = new MusicData();
hashKey.setID(singer); 
hashKey.setAlbum(sampleAlbum);
hashKey.setSinger(duration);

DynamoDBQueryExpression<MusicData> queryExpression = new DynamoDBQueryExpression<MusicData>().withHashKeyValues(hashKey);

List<MusicData> queryResult = mapper.query(MusicData.class, queryExpression);

for (MusicData musicData : queryResult) {
    if( my condtions ) {
        do something;   
    }
}

并得到已经过滤掉的结果。有没有办法在 DynamoDB 中做到这一点?

【问题讨论】:

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


    【解决方案1】:

    是的,您可以要求 DynamoDB 在返回结果之前执行filtering of queries。但是,即使这些项目没有退还给您的客户,您仍然会承担阅读这些项目的“成本”。这仍然是一个很好的做法,因为它将消除通过网络进行不必要的项目传输。

    为此,您将在 DynamoDBQueryExpression 对象上调用其他方法,特别是 withFilterExpressionaddExpressionAttributeNamesEntry / addExpressionAttributeValuesEntry 以完成表达式。

    如果没有具体示例说明您要应用什么类型的条件,很难给出示例,但取决于您要应用的条件有多简单,您可以将其包含在 withFilterExpression 方法中。

    DynamoDBQueryExpression<MusicData> queryExpression = new DynamoDBQueryExpression<MusicData>().withHashKeyValues(hashKey).withFilterExpression("foo > 10");
    

    【讨论】:

    • 好的,我正在寻找一种根据我的条件仅提取这些项目的方法,而不是获取所有项目然后根据我的条件过滤掉。
    • 如果您的条件仅适用于可以使用其他方法的范围键,但没有具体说明,我上面描述的正是您所要求的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2023-02-20
    • 2021-07-25
    • 1970-01-01
    • 2019-08-17
    • 2016-10-15
    • 2016-12-25
    相关资源
    最近更新 更多