3

我的主键是一个名为“id”的字段

我在“group_number”字段的表中添加了二级索引

在此处输入图像描述

我通过二级索引查询,如下所示:

// Query the secondary index
queryInput := &dynamodb.QueryInput{
    TableName: aws.String(c.GetDynamoDBTableName()),
    KeyConditions: map[string]*dynamodb.Condition{
        "group_number": {
            ComparisonOperator: aws.String("EQ"),
            AttributeValueList: []*dynamodb.AttributeValue{
                {
                    S: aws.String(c.GroupNumber),
                },
            },
        },
    },
}

然而; 我收到错误“validationexception:查询条件错过了关键架构元素:id”

DynamoDB 是否只允许查询主键?我的印象是您使用“GetItem”作为主键,如果您使用主键,则只能返回一条记录。要通过二级索引搜索您使用“查询”,并通过非索引键搜索,您使用“扫描”。

请让我知道我在这里做错了什么。

4

2 回答 2

5

除了 TableName 之外,还需要IndexName在创建 QueryInput 时指定属性来查询索引。

https://docs.aws.amazon.com/sdk-for-go/api/service/dynamodb/#QueryInput

// The name of an index to query. This index can be any local secondary index
// or global secondary index on the table. Note that if you use the IndexName
// parameter, you must also provide TableName.
IndexName *string `min:"3" type:"string"`
于 2019-06-13T02:21:58.420 回答
1
var queryInput, err2 = svc.Query(&dynamodb.QueryInput{
        TableName: aws.String(tableName),
        IndexName: aws.String(index_name),
        KeyConditions: map[string]*dynamodb.Condition{
            "Phone": {
                ComparisonOperator: aws.String("EQ"),
                AttributeValueList: []*dynamodb.AttributeValue{
                    {
                        S: aws.String(phone_no),
                    },
                },
            },
        },
    })
于 2021-05-27T08:05:58.713 回答