如何使用分页列出表中的所有项目

我正在尝试使用分页列出 DynamoDB 表中的所有项目,以下是我的尝试:


const tableName = "RecordingTable"


type Recording struct {

    ID string `dynamodbav:"id"`

    CreatedAt string `dynamodbav:"createdAt"`

    UpdatedAt string `dynamodbav:"updatedAt"`

    Duration int `dynamodbav:"duration"`

}


type RecordingRepository struct {

    ctx context.Context

    svc *dynamodb.Client

}


func NewRecordingRepository(ctx context.Context) (*RecordingRepository, error) {

    cfg, err := config.LoadDefaultConfig(ctx)

    if err != nil {

        return nil, err

    }


    return &RecordingRepository{ctx, dynamodb.NewFromConfig(cfg)}, nil

}


func (r *RecordingRepository) List(page int, size int) ([]Recording, error) {

    size32 := int32(size)

    queryInput := &dynamodb.QueryInput{

        TableName: aws.String(tableName),

        Limit:     &size32,

    }


    recordings := []Recording{}

    queryPaginator := dynamodb.NewQueryPaginator(r.svc, queryInput)


    for i := 0; queryPaginator.HasMorePages(); i++ {

        result, err := queryPaginator.NextPage(r.ctx)

        if err != nil {

            return nil, err

        }


        if i == page {

            if result.Count > 0 {

                for _, v := range result.Items {

                    recording := Recording{}

                    if err := attributevalue.UnmarshalMap(v, &recording); err != nil {

                        return nil, err

                    }

                    recordings = append(recordings, recording)

                }

            }

            break

        }

    }


    return recordings, nil

}

当我运行上面的代码时,我收到以下错误消息:


api error ValidationException: Either the KeyConditions or KeyConditionExpression parameter must be specified in the request.

但是,为什么我应该在想要获取所有项目时指定 a?有没有另一种方法或解决方法?KeyConditionExpression


眼眸繁星
浏览 79回答 2
2回答

开满天机

Query确实需要你的钥匙。它用于在 DynamoDB 中查找特定项目。要获取 DynamoDB 中的所有项目,您需要使用该操作。Scan这应该很容易在代码中修复。而不是使用ScanInput,而不是使用NewScanPaginator。QueryInputNewQueryPaginator

慕尼黑8549860

刚刚替换为 和 。QueryInputScanInputQueryPaginatorScanPaginator
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go