如何使用 Go API return 来自 dynamodb table 的排序键的最大时间戳?

How to return the largest timestamp for a sort key from dynamodb table using Go APIs?

我有这样的 table 结构:

类型
bubbleId 字符串
泡泡上次更新 字符串
... ...

bubbleId 是我的主键,bubbleLastUpdated 是我的排序键

省略号 (...) 表示结构中与此问题无关的其余数据。

尽可能使用表达式构建器,应该如何构建 QueryInput 对象,以便返回 bubbleLastUpdated 的最大值?

我在我的 QueryInput 对象中使用以下内容:

    results, err := d.dynamoClient.Query(&dynamodb.QueryInput{
        TableName: aws.String(tableName),
        ScanIndexForward: aws.Bool(false),
        Limit: aws.Int64(1),
    })

当然,这个returns一个错误,说请求中必须有一个KeyConditionExpression参数。我对 key expression builder 有点熟悉,但我不想为这些提供条件。不幸的是,经过大量搜索,我最终来到了这里。我不是在寻找错误的东西,就是遗漏了一些简单的东西。

举个例子会很有帮助。

谢谢!

你所说的主键其实就是分区键。您必须至少指定分区键才能使用 query.

如果您没有分区键,那么您可以使用scan,但效率低下,您应该考虑重新设计table,或者添加global secondary index (gsi)

您可以像这样在查询中使用分区键:

    var queryInput = &dynamodb.QueryInput{
        TableName:        aws.String(tableName),
        ScanIndexForward: aws.Bool(false),
        Limit:            aws.Int64(1),
        KeyConditions: map[string]*dynamodb.Condition{
            "bubbleId": {
                ComparisonOperator: aws.String("EQ"),
                AttributeValueList: []*dynamodb.AttributeValue{
                    {
                        S: aws.String("bubbleId"),
                    },
                },
            },
        },
    }

    var resp, err = d.dynamoClient.Query(queryInput)
    if err != nil {
        return nil, err
    }