gpt4 book ai didi

amazon-web-services - 如何通过全局二级索引过滤golang中的dynamodb?

转载 作者:行者123 更新时间:2023-12-01 22:27:10 25 4
gpt4 key购买 nike

我在使用Go过滤dynamodb表时遇到问题。

该表具有以下结构:

input := &dynamodb.CreateTableInput{
BillingMode: aws.String("PAY_..."),

AttributeDefinitions: []*dynamodb.AttributeDefinition{
{
AttributeName: aws.String("Id"),
AttributeType: aws.String("N"),
},
{
AttributeName: aws.String("Token"),
AttributeType: aws.String("S"),
},
},
KeySchema: []*dynamodb.KeySchemaElement{
{
AttributeName: aws.String("Id"),
KeyType: aws.String("HASH"),
},
},
GlobalSecondaryIndexes: []*dynamodb.GlobalSecondaryIndex{
{
IndexName: aws.String("IdxGS"),
KeySchema: []*dynamodb.KeySchemaElement{
{
AttributeName: aws.String("Token"),
KeyType: aws.String("HASH"),
},
},
Projection: &dynamodb.Projection{
ProjectionType: aws.String("ALL"),
},
},
},
TableName: aws.String("Entity"),
}

我尝试了不同的方法对其进行过滤:

第一种选择:
queryInput := &dynamodb.QueryInput{
TableName: aws.String("Entity"),
IndexName: aws.String("IdxGS"),
KeyConditionExpression: "Token = :token",
ExpressionAttributeValues: {
":token": token,
},
ProjectionExpression: "Id, Token"}

resp, err := DynamoDbClient.Query(queryInput)

而且这段代码是不可编译的,不知道为什么。

还尝试使用另一种类型的输入请求:
选项2:
var queryInput = &dynamodb.QueryInput{
TableName: aws.String("Entity"),
IndexName: aws.String("IdxGS"),
KeyConditions: map[string]*dynamodb.Condition{
"TokenGS": {
ComparisonOperator: aws.String("EQ"),
AttributeValueList: []*dynamodb.AttributeValue{
{
S: aws.String(token),
},
},
},
},
}

尽管它是可编译的,但它没有通过测试。

我检查了许多不同的示例,它们要么不起作用,要么不使用GlobalSecondaryIndex。

最佳答案

使用https://docs.aws.amazon.com/sdk-for-go/api/service/dynamodb/expression软件包更容易,该软件包负责正确设置所有QueryInput属性。

另外,对于用法示例,请检查此repo https://github.com/zshamrock/dynocsv/blob/master/aws/dynamodb/dynamodb.go#L253

因此,在您的情况下,可能看起来像这样:

hash := expression.KeyEqual(expression.Key("Token"), expression.Value(token))
expr, _ := expression.NewBuilder().
WithKeyCondition(hash).
WithProjection(expression.NamesList(expression.Name("Id"), expression.Name("Token"))).
Build()
queryInput := &dynamodb.QueryInput{
TableName: aws.String("Entity"),
IndexName: aws.String("IdxGS"),
KeyConditionExpression: expr.KeyCondition(),
ExpressionAttributeValues: expr.Values(),
ProjectionExpression: expr.Projection()}

关于amazon-web-services - 如何通过全局二级索引过滤golang中的dynamodb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59323126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com