Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaSDK从具有哈希范围模式的给定哈希键查询DynamoDB中的所有项_Java_Amazon Web Services_Amazon Dynamodb - Fatal编程技术网

使用JavaSDK从具有哈希范围模式的给定哈希键查询DynamoDB中的所有项

使用JavaSDK从具有哈希范围模式的给定哈希键查询DynamoDB中的所有项,java,amazon-web-services,amazon-dynamodb,Java,Amazon Web Services,Amazon Dynamodb,编辑: 其实我是错的。当我打算查询一个解释我的错误的索引时,我正在查询表。然而,维克多的解决方案是有效的 原件: 我在DynamoDB中有一个具有哈希范围键模式的表。我需要能够获取与特定散列键关联的所有项,但它似乎需要一个范围键条件。我的问题是我想要每个范围键,但没有通配符选项。目前为止,我的范围键是一个字符串,我能想到的唯一方法是查询所有大于或等于我能使用的最小ascii字符的范围键,因为文档中说它是基于ascii字符值排序的 我查看了扫描,但似乎只是将读取整个表,这不是一个选项 有没有更好的

编辑: 其实我是错的。当我打算查询一个解释我的错误的索引时,我正在查询表。然而,维克多的解决方案是有效的

原件: 我在DynamoDB中有一个具有哈希范围键模式的表。我需要能够获取与特定散列键关联的所有项,但它似乎需要一个范围键条件。我的问题是我想要每个范围键,但没有通配符选项。目前为止,我的范围键是一个字符串,我能想到的唯一方法是查询所有大于或等于我能使用的最小ascii字符的范围键,因为文档中说它是基于ascii字符值排序的

我查看了扫描,但似乎只是将读取整个表,这不是一个选项

有没有更好的方法来查询散列键的所有值,或者任何人都可以确认使用ascii字符的方法是否有效

但它似乎需要一个范围关键条件

这听起来不是真的

我使用和用于查询具有给定哈希键的所有记录,如下所示:

DynamoDBQueryExpression<DomainObject> query = 
    new DynamoDBQueryExpression<DomainObject>();
DomainObject hashKeyValues = new DomainObject();
hashKeyValues.setHashKey(hashKeyValue);
query.setHashKeyValues(hashKeyValues);
// getMapper() returns a DynamoDBMapper object with the appropriate 
// AmazonDynamoDBClient object.
List<DomainObject> results = getMapper().query(query);
DynamoDBQueryExpression查询=
新的DynamoDBQueryExpression();
DomainObject hashKeyValues=新的DomainObject();
setHashKey(hashKeyValue);
query.setHashKeyValues(hashKeyValues);
//getMapper()返回一个DynamoDBMapper对象,该对象具有适当的
//AmazonDynamoDBClient对象。
List results=getMapper().query(查询);

HTH.

您可以使用DynamoDB的查询API,它允许您使用散列/范围键查询基于数据库的条件表达式。您可以看到API的示例。以下是一个相关示例:

ItemCollection<QueryOutcome> items = table.query("theHashFieldName", "theHashFieldToQuery");
ItemCollection items=table.query(“theHashFieldName”、“theHashFieldToQuery”);
您还可以使用更复杂的表达式进行查询。例如:

DynamoDB dynamoDB = new DynamoDB(
    new AmazonDynamoDBClient(new ProfileCredentialsProvider()));

Table table = dynamoDB.getTable("TableName");

QuerySpec spec = new QuerySpec()
    .withKeyConditionExpression("Id = :v_id")
    .withValueMap(new ValueMap()
        .withString(":v_id", "TheId"));

ItemCollection<QueryOutcome> items = table.query(spec);

Iterator<Item> iterator = items.iterator();
Item item = null;
while (iterator.hasNext()) {
    item = iterator.next();
    System.out.println(item.toJSONPretty());
}
DynamoDB DynamoDB=新的DynamoDB(
新的AmazondynamodClient(新的ProfileCredentialsProvider());
Table Table=dynamoDB.getTable(“TableName”);
QuerySpec spec=新QuerySpec()
.withKeyConditionExpression(“Id=:v_Id”)
.withValueMap(新的ValueMap()
使用字符串(“:v_id”,“TheId”);
ItemCollection items=table.query(spec);
迭代器迭代器=items.Iterator();
Item=null;
while(iterator.hasNext()){
item=iterator.next();
System.out.println(item.toJSONPretty());
}

您能提供您的代码和表定义吗?我试图使用您的方法仅基于HashKey查询表,但它对我不起作用。如果你能帮忙,请告诉我。谢谢你能详细说明一下“不工作”吗?它不返回任何带有该HashKey的行吗?或者它抛出了一些异常?您确定有使用您试图搜索的哈希键的记录吗@KeshavSharma在这个问题中,调用mapper.query()后不会发生任何事情。我在前面的步骤中使用mapper.save()创建了记录。感谢您的帮助。是否需要创建索引?如果您查询表的哈希/范围键,这将是现成的。如果要查询GSI,则需要索引。