使用Golang查询Dynamo数据库中的索引

时间:2019-04-20 20:40:07

标签: go amazon-dynamodb

我需要golang中的示例,说明如何在dynamo db中对索引进行查询。 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SQLtoNoSQL.Indexes.QueryAndScan.html

上面的一个是针对JS的,我找不到一个用于golang的代码,而我之前为go编写了此代码的代码:

让我们说一下二级索引的名称是user_id_index 并且键名称为user_id

    keyCondition := expression.Key("user_id").Equal(expression.Value(userId))
    expr, errExpression := expression.NewBuilder().WithKeyCondition(keyCondition).WithProjection(proj).Build()

    if errExpression != nil {
        log.Printf("error: creating dynamo expression ", errExpression)

        return listResponse, errExpression
    }
    params := &dynamodb.QueryInput{
        ExpressionAttributeValues: expr.Values(),
        ProjectionExpression:      expr.Projection(),
        TableName:                 aws.String(tableName),
        IndexName:                 aws.String("user_id_index"),
        KeyConditionExpression:    expr.KeyCondition(),

    }
    result, errResults := svc.Query(params)

我收到以下错误

error: scanning dynamo table %!(EXTRA *awserr.requestError=ValidationException:
 Invalid KeyConditionExpression: An expression attribute name used in the document path is not defined;
 attribute name: #0

任何指向优秀教程的链接都将受到赞赏,或者将代码示例作为答案。

预先感谢

1 个答案:

答案 0 :(得分:2)

我认为您缺少表达式属性名称。尝试将其添加到您的查询输入中:

ExpressionAttributeNames:  expr.Names(),