Java 如何查询DynamoDB并返回第一个匹配结果,而不是查询整个集合?
我们有一些旧代码正在查询DynamoDB以查找匹配记录的列表 示例代码如下:Java 如何查询DynamoDB并返回第一个匹配结果,而不是查询整个集合?,java,amazon-dynamodb,dynamodb-queries,Java,Amazon Dynamodb,Dynamodb Queries,我们有一些旧代码正在查询DynamoDB以查找匹配记录的列表 示例代码如下: final DynamoDBQueryExpression<MyObject> queryExp = new DynamoDBQueryExpression<MyObject>() .withHashKeyValues(myObject) .withIndexName(indexName) .withScanInde
final DynamoDBQueryExpression<MyObject> queryExp = new DynamoDBQueryExpression<MyObject>()
.withHashKeyValues(myObject)
.withIndexName(indexName)
.withScanIndexForward(false)
.withConsistentRead(true)
.withLimit(rowsPerPage);
final PaginatedQueryList<MyObject> ruleInstanceList = dynamoDBMapper.query(MyObject.class, queryExp);
final DynamoDBQueryExpression queryExp=new DynamoDBQueryExpression()
.withHashKeyValues(myObject)
.withIndexName(indexName)
.带CANINDEXFORWARD(假)
.与ConsistentRead一致(正确)
.带限制(行/页);
最终分页的QueryList ruleInstanceList=dynamoDBMapper.query(MyObject.class,queryExp);
这是一个缓慢的操作,因为这个查询将返回一个匹配的MyObject
列表,我注意到我们使用它的目的就是检查这个列表是否为空
因此,我要做的只是执行查询以查找第一个元素,或者甚至是其他类型的查询,以确保计数大于0,我需要验证的是记录是否存在,以便减少延迟
我的问题是,我如何做到这一点 的文档表明:
请注意,在调用DynamoDBMapper.query时,如果需要检索整个结果集,会向DynamoDB发出多个请求。设置此选项将限制每个请求检索的项目数,而不是将检索的结果总数。使用DynamoDBMapper.queryPage从DynamoDB检索单个页面的项
要限制结果的数量,可以使用而不是query()。并对查询表达式应用withLimit(1)
的文档表明:
请注意,在调用DynamoDBMapper.query时,如果需要检索整个结果集,会向DynamoDB发出多个请求。设置此选项将限制每个请求检索的项目数,而不是将检索的结果总数。使用DynamoDBMapper.queryPage从DynamoDB检索单个页面的项
要限制结果的数量,可以使用而不是query()。并对查询表达式应用
withLimit(1)
你可以用Limit(1)@jarmod设置,我不认为这是Limit
的工作原理,我测试了它,结果仍然是一个完整的列表,听起来不正确。Limit=1的单个API调用最多应返回1项。@jarmod可能是由于当前编写代码的方式,但结果仍然是完整列表,而不是1项。我在withLimit(1)
的时候测试了它,你可能只需要设置withLimit(1)
@jarmod我不认为Limit
是这样工作的,我测试了它,结果仍然是一个完整的列表,听起来不正确。Limit=1的单个API调用最多应返回1项。@jarmod可能是由于当前编写代码的方式,但结果仍然是完整列表,而不是1项。我在使用limit(1)