首页 > 解决方案 > DynamoDb SDK 不完整扫描

问题描述

我正在运行一个使用aws go sdk的网络服务器

在我的go.mod

    github.com/aws/aws-sdk-go v1.30.16

我正在尝试使用此库对表运行dynamodb 扫描

    sess, err := session.NewSession(&aws.Config{
        Region: aws.String("us-west-2"),
    })

    if err != nil {
        return nil, err
    }

    // Create DynamoDB client
    svc := dynamodb.New(sess)

    // snip
    predatesExpirationHorizon := expression.Name(RequestSchema.TimeStamp).BeginsWith("2020-04-27T09")

    projectionExpr := expression.NamesList(
        expression.Name(RequestSchema.PrimaryKey),
        expression.Name(RequestSchema.SortKey),
        expression.Name(RequestSchema.TimeStamp),
        expression.Name(RequestSchema.State),
    )

    expr, err := expression.NewBuilder().
        WithFilter(predatesExpirationHorizon).
        WithProjection(projectionExpr).Build()

    // snip

    params := &dynamodb.ScanInput{
        ExpressionAttributeNames:  expr.Names(),
        ExpressionAttributeValues: expr.Values(),
        FilterExpression:          expr.Filter(),
        ProjectionExpression:      expr.Projection(),
        TableName:                 aws.String(RequestSchema.TableName),
    }

    res, err := svc.Scan(params)

    fmt.Printf("results %v out of %v", *res.Count, *res.ScannedCount)

这从 8010 的计数中返回了我表中的 2 个项目,并且LastEvaluatedKey是空的

但是,当我尝试从 cli 复制它时,我从 8276 中得到了 3 个项目(其中 2 个是相同的)

aws --region us-west-2 dynamodb scan \
     --table-name MyTable \
     --projection-expression '#1, #2, #0, #3' \
     --filter-expression 'begins_with (#0, :0)' \
     --expression-attribute-values '{":0":{"S":"2020-04-27T09"}}' \
     --expression-attribute-names '{"#0":"createdAt","#1":"PK","#2":"SK","#3":"state"}'

我用调试器挖掘了这个库,我可以看到它正在运行一个带有以下帖子正文的 http 请求:

{"ExpressionAttributeNames":{"#0":"createdAt","#1":"PK","#2":"SK","#3":"state"},
"ExpressionAttributeValues":{":0":{"S":"2020-04-27T09"}},
"FilterExpression":"begins_with (#0, :0)",
"ProjectionExpression":"#1, #2, #0, #3",
"TableName":"MyTable"}

这感觉极不可能,所以我假设我做错了什么。

当我使用 AWS 控制台时,很明显有 3 个匹配项。

我看过的一些东西:

标签: goamazon-dynamodbaws-sdkaws-sdk-go

解决方案


推荐阅读