如何使用 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
}
我有这样的 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
}