我收到了一项任务,要返回我拥有 id 的项目列表的数据。该表的 id 定义为: ...
"KeySchema" [
0: {
"AttributeName":"id"
"KeyType":"HASH"
"TableStatus":"ACTIVE"
我有一个包含 100 个 id 的列表,并且希望以类似于 SQL 中 IN 工作方式的方式进行查询以返回详细信息。
我尝试了多种方法,但找不到一种方法可以对 DynamoDB 实例进行单个查询,在该实例中它将返回所提供列表中 Id 的所有文档。
我希望使用DynamoDBMapper。
当我在 DynamoDBQueryExpression
上发现 withHashKeyValues
时,我以为自己中了大奖。
例如
DynamoDBQueryExpression<MyObject> ddqe;
...
for (String idStr : idList) {
MyObject mo= new MyObject();
mo.setId(idStr);
ddqe.withHashKeyValues(mo);
}
但是查看代码,尽管该方法是复数,但有一条注释说:
Note 1: Currently the DynamoDBMapper supports only one value per hash key.
我还尝试了一个条件(以及其他许多事情)
Condition condition = new Condition();
condition.withAttributeValueList(filters);
condition.withComparisonOperator(ComparisonOperator.EQ);
其中过滤器是 ids 的 ArrayList。
有没有办法在 DynamoDb 中执行此操作,或者我必须单独查询数据库中的每个已知 ID,例如向数据存储发出 100 个查询?
最佳答案
查询从特定分区键开始,因此您必须使用查询 API 一次查找一个键。相反,您可以使用 BatchGetItem API 并一次请求 25 个项目。
关于java - SQL IN 与 java 中的 DynamoDb 等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40306667/