如何在 DynamoDB 中根据 HashKey 和 range Key 进行查询?

2022-01-15 00:00:00 amazon-dynamodb java

我是 DynamoDb 的新手.我只想知道如何使用 hashKeyrangeKey 查询 DynamoDB 中的表.

I am new to DynamoDb stuff. I just want to know how can we query on a table in DynamoDB with the hashKey and rangeKey.

假设我的表是 TestTable,它的架构是这样的:

Let's say my Table is TestTable and it's schema is something like this:

1.Id (HK of type String)
2 Date (RK of type String )
3 Name (attribute of type String)

现在如果我想根据 hashKey 查询这张表,这里是 Id,我们将 query 设为:

Now If I want to query on this table on the basis of hashKey which is Id here, we make a query as :

假设我的查询是获取所有具有 Id ="123" 的项目.

Let's say my query is to get all Items having Id ="123".

TestTable testTable = new TestTable();
testTable.setId("123");

DynamoDBQueryExpression<TestTable> queryExpression = new DynamoDBQueryExpression<TestTable>()
                                                                .withHashKeyValues(TestTable)
                                                                .withConsistentRead(false);

现在我想获取所有具有 Id ="123" 和 Date ="1234" 的项目.

Now I want to get all Items having Id ="123" and Date ="1234".

如何在DynamoDB

我使用 java 作为我的编程语言.

I am using java as my programming language.

推荐答案

我前段时间写了一篇关于使用 AWS Java SDK 进行 DynamoDB 查询和索引的文章:http://labs.journwe.com/2013/12/15/dynamodb-secondary-indexes/

I wrote an article about DynamoDB queries and indexing using the AWS Java SDK some time ago: http://labs.journwe.com/2013/12/15/dynamodb-secondary-indexes/

在您的情况下,它应该像这样工作(请参阅 http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/JavaQueryScanORMModelExample.html):

In your case, it should work like this (see http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/JavaQueryScanORMModelExample.html):

AmazonDynamoDBClient client = new AmazonDynamoDBClient(new ProfileCredentialsProvider());
DynamoDBMapper mapper = new DynamoDBMapper(client);

String hashKey = "123";
long twoWeeksAgoMilli = (new Date()).getTime() - (15L*24L*60L*60L*1000L);
Date twoWeeksAgo = new Date();
twoWeeksAgo.setTime(twoWeeksAgoMilli);
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
dateFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
String twoWeeksAgoStr = dateFormatter.format(twoWeeksAgo);            
Condition rangeKeyCondition = new Condition()
        .withComparisonOperator(ComparisonOperator.GT.toString())
        .withAttributeValueList(new AttributeValue().withS(twoWeeksAgoStr.toString()));

Reply replyKey = new Reply();
replyKey.setId(hashKey);

DynamoDBQueryExpression<Reply> queryExpression = new DynamoDBQueryExpression<Reply>()
        .withHashKeyValues(replyKey)
        .withRangeKeyCondition("ReplyDateTime", rangeKeyCondition);

List<Reply> latestReplies = mapper.query(Reply.class, queryExpression);

查看 DynamoDB 文档的 Java 对象持久性模型部分了解更多信息.

Check out the Java Object Persistence Model section of the DynamoDB docs for more info.

相关文章