0

我在发电机数据库中有一张桌子。下面是该表的键。

partitionKey -campaignId sortKey - 电子邮件

我已经为这个表创建了一个本地二级索引。下面是本地二级索引的键

partitionKey -campaignId sortKey - subStatus

根据 dynamo db,您应该在设置 ExclusiveStartKey 时包含表的主键和索引(作为键),以及最后评估的值(作为属性值)。

下面是代码的代码片段。

public QueryResultPage<Prospect> getPaginatedProspectsByCampaignIdAndSubStatus(String campaignId, ProspectSubStatus subStatus, Integer limit, Map<String, AttributeValue> lastEvaluatedKey, String email) {
        Prospect prospect = new Prospect();
        prospect.setCampaignId(campaignId);
        
        Map<String, AttributeValue> exclusiveStartKey = new HashMap<String, AttributeValue>();
        if(!lastEvaluatedKey.isEmpty()) {
            exclusiveStartKey.put("campaingId", lastEvaluatedKey.get("campaingId"));
            exclusiveStartKey.put("subStatus", lastEvaluatedKey.get("subStatus"));
            exclusiveStartKey.put("email", new AttributeValue().withS(email));
        }

        Condition rangeKeyCondition = new Condition()
                .withComparisonOperator(ComparisonOperator.EQ)
                .withAttributeValueList(new AttributeValue().withS(subStatus.toString()));
        DynamoDBQueryExpression queryExpression = null;
        if(exclusiveStartKey.isEmpty()) {
            queryExpression = new DynamoDBQueryExpression<Prospect>()
                    .withHashKeyValues(prospect)
                    .withIndexName("subStatus-index")
                    .withRangeKeyCondition("subStatus", rangeKeyCondition)
                    .withConsistentRead(false).withLimit(limit);
        } else {
             queryExpression = new DynamoDBQueryExpression<Prospect>()
                    .withHashKeyValues(prospect)
                    .withIndexName("subStatus-index")
                    .withExclusiveStartKey(exclusiveStartKey)
                    .withRangeKeyCondition("subStatus", rangeKeyCondition)
                    .withConsistentRead(false).withLimit(limit);
        }
        
        QueryResultPage<Prospect> prospects = mapper.queryPage(Prospect.class, queryExpression);
        return prospects;
    }

但是当运行它时,我遇到了错误。有人可以帮助我了解我做错了什么以及如何实现分页。 在此处输入图像描述

4

0 回答 0