doc指出:
缺少LastEvaluatedKey是了解您拥有的唯一方法 到达结果集的结尾
但是,如果您有10个项目并且要查询10个项目,则将使用LastEvaluatedKey获得结果集。但是,此后没有更多项目了。
是否有可靠的方法可以真正知道何时到达结果集的末尾?
答案 0 :(得分:0)
当您指定限制(每个问题10个)时,它会找到限制所提供的项目数,并且看起来不会超出限制。
由于项目为10,限制为10,因此每次都可以按限制查找元素。
在第二次尝试读取项目时,它在表中找不到任何项目,因此返回null。您将需要while循环,如下所示:
List<QueryResult> queryResultList = new ArrayList<>();
// Since query returns only max 1MB of items at a time,
// use of this flag tells if no more such elements are present in db.
Map<String, AttributeValue> lastKeyEvaluated = null;
Map<String, AttributeValue> expressionAttributeValue = new HashMap<>();
expressionAttributeValue.put(":primary_key_value", new AttributeValue().withS(primary_key_value));
do {
QueryRequest queryRequest = new QueryRequest()
.withTableName(this.getDynamoTable().getTableName())
.withIndexName(Constants.Table.INDEX_NAME)
.withKeyConditionExpression("primary_key = :primary_key_value")
.withExpressionAttributeValues(expressionAttributeValue)
.withExclusiveStartKey(lastKeyEvaluated);
QueryResult result = this.getAmazonDynamoDBClient().query(queryRequest);
queryResultList.add(result);
lastKeyEvaluated = result.getLastEvaluatedKey();
} while (lastKeyEvaluated != null);